You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Maven从替代位置加载tools.jar依赖

如何配置Maven从替代位置加载tools.jar依赖

我之前在JDK11+环境里折腾老Maven插件的时候,也碰到过一模一样的tools.jar问题,尤其是还不能碰系统目录的情况下,简直头大!结合你的情况——只能操作自己的用户目录、用的是JDK15,给你两个落地的解决办法:

方法一:手动在本地仓库安装模拟的tools.jar依赖

因为JDK15已经没有原生的tools.jar了,它的功能被拆进了JDK的模块化组件里,我们可以从JDK的模块导出对应内容,打包成jar后安装到你用户目录下的本地Maven仓库,这样老POM里的依赖就能正常识别:

  • 先在你的用户目录下新建一个临时文件夹,比如~/temp-tools-jar
  • 执行下面的命令,从JDK的jdk.compiler模块导出内容,打包成tools.jar(记得把${java.home}替换成你实际的JDK路径,比如/usr/lib/jvm/jdk-15):
    jar --create --file=~/temp-tools-jar/tools.jar --module-version=15.0.0 --main-class=com.sun.tools.javac.Main -C ${java.home}/mods/jdk.compiler .
    
  • 接着用Maven命令把这个jar安装到你的本地仓库(也就是用户目录下的.m2/repository):
    mvn install:install-file -Dfile=~/temp-tools-jar/tools.jar -DgroupId=com.sun -DartifactId=tools -Dversion=15.0.0 -Dpackaging=jar
    
  • 最后回到你的项目POM,把原来com.sun:tools依赖的版本改成15.0.0,去掉system scope和systemPath配置,这样Maven就会自动从你本地仓库加载这个依赖了。

方法二:修改POM依赖的system scope路径(适合不想手动打包的情况)

如果不想折腾打包步骤,也可以直接修改POM里的依赖配置,指向JDK15里包含原tools.jar内容的模块路径:

  • 找到POM里的com.sun:tools依赖节点,修改成下面这样:
    <dependency>
        <groupId>com.sun</groupId>
        <artifactId>tools</artifactId>
        <version>15.0.0</version>
        <scope>system</scope>
        <!-- 指向JDK15里的jdk.compiler模块对应文件,路径根据你的实际JDK位置调整;如果是jmod文件,可先解压到用户目录再指向解压后的jar -->
        <systemPath>${user.home}/my-jars/tools-proxy.jar</systemPath>
    </dependency>
    
    要是你的JDK里只有jdk.compiler.jmod文件,你可以用unzip命令把它解压到用户目录下的某个文件夹,再把解压出的内容打包成jar,把上面的systemPath指向这个自定义jar的路径就行,毕竟你只能操作自己的目录,这样更稳妥。

额外小技巧

如果不想每个项目都改POM,你可以在用户目录下的.m2/settings.xml里添加一个全局profile,让所有项目自动加载这个依赖:

<profiles>
    <profile>
        <id>jdk-tools-fix</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>com.sun</groupId>
                <artifactId>tools</artifactId>
                <version>15.0.0</version>
                <scope>system</scope>
                <systemPath>${user.home}/temp-tools-jar/tools.jar</systemPath>
            </dependency>
        </dependencies>
    </profile>
</profiles>

这样不管你跑哪个项目,只要用的是当前用户的Maven配置,都会自动加载这个依赖,省了不少重复操作。

备注:内容来源于stack exchange,提问作者Keith Fosberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:03:12