【Maven 构建错误解决方案】‘systemPath‘ 必须是绝对路径,但当前为 ${JAVA_HOME}/lib/tools.jar

📌 问题背景

在使用 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>

但是:

  1. systemPath 必须是 绝对路径,不能使用 ${JAVA_HOME} 这种变量;
  2. 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 构建技能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值