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

为何部分Maven依赖会查找错误的Java版本?

问题分析与解决步骤

核心问题

javassist 3.18.1-GA的POM文件中硬编码了${java.home}/../lib/tools.jar路径,但Java 9及以上版本已移除tools.jar文件;同时Maven构建时实际调用的是JDK 23(而非你命令行显示的JDK 17),导致路径不存在报错。


1. 确认Maven实际使用的JDK版本

执行以下命令,查看输出中的Java版本,确认是否为JDK 23:

mvn -version

命令行的java和Maven依赖的JDK可能不一致——Maven会优先读取JAVA_HOME环境变量,或系统默认的JDK路径。

2. 强制Maven使用JDK 17

提供三种可行方案,按需选择:

  • 临时构建时指定:在执行Maven命令前先设置环境变量
    export JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.12/libexec/openjdk.jdk/Contents/Home
    mvn clean install
    
  • 全局配置Maven:新建或编辑~/.mavenrc文件,添加以下内容(重启终端生效)
    export JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.12/libexec/openjdk.jdk/Contents/Home
    
  • 项目级绑定:在项目根POM中添加maven-compiler-plugin配置,强制指定JDK版本(覆盖自定义的jdkLevel属性)
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.12.1</version>
          <configuration>
            <source>17</source>
            <target>17</target>
            <fork>true</fork>
            <executable>${JAVA_HOME}/bin/javac</executable>
            <compilerVersion>17</compilerVersion>
          </configuration>
        </plugin>
      </plugins>
    </build>
    

3. 彻底解决tools.jar依赖问题

javassist 3.18.1-GA是2014年的老旧版本,未适配Java 9+的目录结构。建议升级到适配新版本Java的javassist版本(如3.28.0-GA及以上),可通过以下方式在项目中替换:

<dependencies>
  <dependency>
    <groupId>org.glassfish.hk2</groupId>
    <artifactId>hk2-locator</artifactId>
    <version>2.4.0-b31</version>
    <exclusions>
      <exclusion>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <!-- 引入适配Java9+的javassist版本 -->
  <dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.29.2-GA</version>
  </dependency>
</dependencies>

4. 长期切换系统默认JDK为17

如果需要将JDK 17设为系统默认,可通过brew执行:

brew unlink openjdk && brew link openjdk@17 --force

执行后重启终端,再次验证java -version和mvn -version的版本是否一致。


内容的提问来源于stack exchange,提问作者gph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:42:46