classpath
(类路径)是 Java 虚拟机(JVM)用于查找类文件(.class
) 和资源文件(如 .xml
、.properties
等) 的路径集合。当程序运行时,JVM 会从 classpath
中搜索需要加载的资源,它是 Java 程序访问资源的 “基准路径”。
这与 Maven/Gradle 等构建工具的默认目录约定和编译打包规则直接相关。
标准的 Maven 项目目录结构如下:
src/
├── main/
│ ├── java/ // 存放 Java 源代码(.java 文件)
│ └── resources/ // 存放资源文件(.xml、.properties 等)
└── test/...
当使用 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
Java 程序运行时,classpath
会默认指向编译后的 target/classes
目录(或打包后的 JAR
包内部,JAR
包本质是压缩的 target/classes
结构)。因此:
src/main/resources
中的资源文件,编译后位于 target/classes
下,自然被包含在 classpath
中;
- 程序通过
classpath:xxx
查找资源时,实际就是在 target/classes
目录中查找。
结合上面的编译结果,classpath:mapper/*.xml
表示:
- 从
classpath
根路径(即 target/classes
)开始,查找所有在 mapper
文件夹下的 .xml
文件。
- 对应到开发时的目录,就是
src/main/resources/mapper
文件夹下的所有 .xml
文件(因为编译后它们会被复制到 target/classes/mapper
中)。
classpath
是 JVM 查找资源的基准路径,在 Spring Boot 项目中默认指向编译后的 target/classes
目录(或 JAR 包内部);
src/main/resources
目录的资源文件会被复制到 target/classes
,因此属于 classpath
范围;
classpath:mapper/*.xml
本质是告诉 MyBatis:“去 classpath
下的 mapper
文件夹中,加载所有 .xml
映射文件”,对应开发时的 src/main/resources/mapper
目录。
最终 target/classes
目录的结构如下(假设 resources
下有 mapper/UserMapper.xml
):