resources为什么是类的根目录
在 Java 项目中,resources
目录被称为“类的根目录”,是因为它被构建工具(如 Maven/Gradle)默认配置为 资源文件的存放位置,编译后其中的文件会被直接复制到 target/classes
(或 build/classes
)目录下,与编译后的 .class
文件处于同一层级,因此在运行时可以通过 类加载器(ClassLoader) 直接访问,路径相对于类的根目录。
** 为什么叫“类的根目录”?**
- 编译后的结构:
当项目编译后,src/main/resources
下的所有文件会被复制到target/classes
(Maven)或build/resources/main
(Gradle),与编译生成的.class
文件同级。
例如:target/classes/├── com/example/MyClass.class # 编译后的类└── config.properties # 资源文件(直接可访问)
- 类加载器的视角:
JVM 通过类加载器加载资源时,会从classes
目录开始查找,因此resources
下的文件路径是相对于“类根目录”的。
示例:项目结构 vs 运行时结构
开发时项目结构
src/main/java/com/example/MyClass.javaresources/config.propertiesdb/mysql.properties
编译后(Maven)
target/classes/com/example/MyClass.class # 编译后的类config.properties # 资源文件db/mysql.properties # 子目录资源
resources
是 资源的根目录,编译后文件与.class
文件同级,路径相对于classes
目录。