classpath 和 classpath* 的区别
classpath 和 classpath* 的区别
classpath
和 classpath*
是两种不同的类路径搜索模式,它们在寻找资源文件时有所不同:
- classpath:
classpath
表示只在当前类加载器的类路径中搜索资源,不包括依赖的 JAR 文件和其他类加载器的路径。这意味着只有当前项目或模块的类路径下的资源文件会被搜索到。 - classpath*:
classpath*
表示在所有类加载器的类路径中搜索资源,包括当前项目的类路径和所有依赖的 JAR 文件中的类路径。这使得你可以在整个应用程序的类路径中搜索资源。
下面是一个示例,以更清晰地说明这两种类路径搜索模式的区别:
假设你有一个 Spring Boot 项目,项目结构如下:
my-project/
├── src/
│ ├── main/
│ │ ├── java/
│ │ ├── resources/
│ │ │ ├── application.properties
│ │ └── static/
│ │ │ ├── styles.css
└── lib/
├── my-library.jar
- 使用
classpath
:
如果使用 classpath
来搜索资源,比如 classpath:application.properties
,它将仅在当前项目的类路径中搜索。因此,只有 my-project
中的 resources
目录下的 application.properties
文件会被找到。
- 使用
classpath*
:
如果使用 classpath*
来搜索资源,同样搜索 classpath:application.properties
,它将搜索整个应用程序的类路径,包括 my-project
中的类路径以及 my-library.jar
中的类路径。因此,application.properties
文件会被搜索到,无论它位于哪个类路径中。
总结:classpath
只搜索当前项目的类路径,而 classpath*
搜索整个应用程序的类路径,包括依赖的 JAR 文件。你可以根据需要选择适当的类路径搜索模式。
你只有十分努力,才能看上去毫不费力。