在 Maven 的依赖配置中,<systemPath> 元素用于指定一个系统范围的依赖的绝对路径。当你使用 <scope>system</scope> 时,Maven 不会从远程仓库中查找依赖,而是直接使用本地文件系统中指定的 JAR 文件。
在你提供的依赖配置中:
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
<systemPath> 指向了环境变量 JAVA_HOME 下的 lib/tools.jar。这意味着 Maven 会使用该路径下的 tools.jar 文件作为 jdk.tools 依赖。tools.jar 是 JDK 的一部分,包含了 Java 编译器和其他工具类,通常用于需要编译 Java 源代码或使用 Java Instrumentation API 的项目。
请注意,使用 <scope>system</scope> 和 <systemPath> 是一种不推荐的做法,因为它使得构建依赖于特定的环境设置,从而降低了项目的可移植性。在不同的环境或机器上,JAVA_HOME 可能会指向不同的路径,或者在某些环境中可能没有设置这个环境变量,这会导致构建失败。
从 Java 9 开始,tools.jar 不再存在,因为 JDK 的模块化改动。如果你的项目需要在 Java 9 或更高版本上运行,你应该避免使用 tools.jar,并寻找其他替代方案。对于一些特定的用例,比如使用 Java Compiler API,你可以直接使用 JDK 提供的相应模块,而不需要依赖 tools.jar。