Maven打包命令执行失败求助:编译时出现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
相关产品推荐
相关产品推荐

