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

Maven打包命令执行失败求助:编译时出现com.sun.tools.javac.code.TypeTags类找不到错误

解决Maven打包报错:java.lang.ClassNotFoundException: com.sun.tools.javac.code.TypeTags

问题根源

你的核心问题是Maven实际使用的JDK版本与你通过jenv配置的版本不一致:

  • 你通过jenv设置的本地JDK是1.8.0_275,JAVA_HOME也指向这个版本
  • 但mvn -v显示Maven正在使用JDK15.0.1编译项目

而com.sun.tools.javac.code.TypeTags是JDK8及更早版本的内部API,JDK9+已经移除了这个类(替换为javax.lang.model.type.TypeKind)。当Maven用JDK15编译目标为JDK8的代码时,就会找不到这个已被删除的类,导致编译失败。


分步解决方案

1. 让Maven使用正确的JDK1.8版本

有两种可靠的方式确保Maven和jenv的JDK版本一致:

方式一:通过jenv为项目绑定JDK版本

在你的项目根目录执行以下命令:

jenv local 1.8

这会在项目目录下生成一个.java-version文件,jenv会优先使用这个文件指定的JDK版本。执行完后,重新打开终端或者运行jenv rehash,再执行mvn -v检查,确认Maven的Java版本已经变成1.8.0_275。

方式二:强制Maven Compiler插件使用指定JDK

如果jenv的配置没生效,可以直接修改pom.xml里的maven-compiler-plugin,强制指定JDK1.8的编译器路径:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <!-- 开启编译分叉,使用指定的JDK编译器 -->
        <fork>true</fork>
        <executable>/Users/rohitashwanigam/.jenv/versions/1.8/bin/javac</executable>
        <compilerVersion>1.8</compilerVersion>
    </configuration>
</plugin>

2. 优化依赖兼容性(可选但推荐)

你的项目中使用的Guice 3.0版本较老,虽然兼容JDK8,但可以考虑升级到更稳定的4.2.3版本,减少潜在的兼容性问题:

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.3</version>
</dependency>

3. 验证修复效果

执行打包命令前,先确认以下两个输出:

  • java -version显示为openjdk version "1.8.0_275"
  • mvn -v显示的Java版本也是1.8.0_275

之后再运行:

mvn clean package -X

应该就能正常完成打包了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:07:41