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):