首页 > Java > springboot classpath 为什么是resources目录?

springboot classpath 为什么是resources目录?

2025-07-15 15:44:02

一、classpath 的本质:Java 程序的 “资源查找根路径”

classpath(类路径)是 Java 虚拟机(JVM)用于查找类文件(.class 和资源文件(如 .xml.properties 等) 的路径集合。当程序运行时,JVM 会从 classpath 中搜索需要加载的资源,它是 Java 程序访问资源的 “基准路径”。

二、为什么 classpath 对应编译后的 resources 目录?

这与 Maven/Gradle 等构建工具的默认目录约定编译打包规则直接相关。

1. 开发时的项目目录结构(以 Maven 为例)

标准的 Maven 项目目录结构如下:
src/
├── main/
│   ├── java/         // 存放 Java 源代码(.java 文件)
│   └── resources/    // 存放资源文件(.xml、.properties 等)
└── test/...

2. 编译后的目录结构

当使用 Maven 编译项目时(执行 mvn compile),会将:
  • src/main/java 中的 .java 文件编译为 .class 文件,输出到 target/classes 目录;
  • src/main/resources 中的资源文件直接复制到 target/classes 目录(不编译,保持原格式)。
target/classes/
├── com/
│   └── example/      // 编译后的 .class 文件(对应 src/main/java 中的包结构)
│       ├── model/
│       ├── mapper/
│       └── ...
└── mapper/           // 从 resources 复制过来的资源文件
    └── UserMapper.xml

3. classpath 指向 target/classes

Java 程序运行时,classpath 会默认指向编译后的 target/classes 目录(或打包后的 JAR 包内部,JAR 包本质是压缩的 target/classes 结构)。因此:

 

  • src/main/resources 中的资源文件,编译后位于 target/classes 下,自然被包含在 classpath 中;
  • 程序通过 classpath:xxx 查找资源时,实际就是在 target/classes 目录中查找。

三、classpath:mapper/*.xml 的具体含义

结合上面的编译结果,classpath:mapper/*.xml 表示:

 

  • 从 classpath 根路径(即 target/classes)开始,查找所有在 mapper 文件夹下的 .xml 文件。
  • 对应到开发时的目录,就是 src/main/resources/mapper 文件夹下的所有 .xml 文件(因为编译后它们会被复制到 target/classes/mapper 中)。
  1. classpath 是 JVM 查找资源的基准路径,在 Spring Boot 项目中默认指向编译后的 target/classes 目录(或 JAR 包内部);
  2. src/main/resources 目录的资源文件会被复制到 target/classes,因此属于 classpath 范围;
  3. classpath:mapper/*.xml 本质是告诉 MyBatis:“去 classpath 下的 mapper 文件夹中,加载所有 .xml 映射文件”,对应开发时的 src/main/resources/mapper 目录。

 

最终 target/classes 目录的结构如下(假设 resources 下有 mapper/UserMapper.xml):
使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top