📌 问题背景
在使用 Maven 构建 Java 项目时,出现如下错误:
[ERROR] 'dependencies.dependency.systemPath' for jdk.tools:jdk.tools:jar must specify an absolute path but is ${JAVA_HOME}/lib/tools.jar @ line 103, column 16
这个问题常见于使用 JDK 8 或旧项目升级到 JDK 11+ 时。
📂 错误原因详解
在 pom.xml
中,一般会添加如下依赖来引入 JDK 的 tools.jar
:
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
但是:
systemPath
必须是 绝对路径,不能使用${JAVA_HOME}
这种变量;- 从 JDK 9 开始,tools.jar 已被移除,Maven 无法找到该文件导致构建失败。
✅ 解决方案
✅ 方法一:删除该依赖(推荐)
适用于使用 JDK 9 及以上版本的项目。大多数情况下并不需要显式引入 tools.jar
,因此可直接从 pom.xml
中删除:
<!-- 删除这个依赖 -->
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
这将彻底解决错误。
🛠 方法二:使用绝对路径(仅限 JDK 8)
如果你仍然使用 JDK 8,并且确实依赖于 tools.jar
(比如需要访问 com.sun.tools.*
中的类),可使用绝对路径:
<systemPath>/usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar</systemPath>
⚠️ 注意事项:
- 该路径必须在当前构建机器上真实存在;
- 不推荐在 CI/CD 等多平台构建环境中使用。
📎 如何查看当前使用的 JDK 版本?
在终端执行以下命令:
java -version
输出示例(JDK 17):
openjdk version "17.0.8" 2023-07-18
🎯 总结
场景 | 解决方案 |
---|---|
使用 JDK 9+ | 删除 tools.jar 依赖 |
使用 JDK 8 | 使用绝对路径引入 tools.jar |
如果你在构建过程中遇到其他 Maven 或 JDK 兼容性问题,欢迎留言交流,我会持续更新该系列解决方案。
创作不易,如果本文帮到了你,记得点赞 + 收藏 + 关注我,一起提升 Java 构建技能!