IntelliJ中微服务Maven编译失败求助:maven-compiler-plugin报错
Maven编译失败问题排查与解决
问题描述
我下载了多款微服务项目,执行mvn clean及mvn install -DskipTests命令时,均出现构建失败,错误日志如下:
[INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.229 s [INFO] Finished at: 2019-02-09T10:04:32+05:30 [INFO] Final Memory: 36M/130M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project invoice-microservice: Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
我的环境信息:
- Maven版本:Apache Maven 3.5.2
- Maven主目录:/usr/share/maven
- Java版本:10.0.2,厂商:Oracle Corporation
- Java主目录:/usr/lib/jvm/java-11-openjdk-amd64
- 默认区域设置:en_US,平台编码:UTF-8
- 操作系统:linux,版本:4.15.0-44-generic,架构:amd64,家族:unix
问题分析
这个错误的核心是com.sun.tools.javac.code.TypeTags类找不到——这个类在Java 9及之后的版本里被移除了,而你使用的maven-compiler-plugin:3.5.1是比较老旧的版本,它依赖这个已被移除的类,所以在Java 10/11环境下会直接编译失败。另外你的Java环境还存在矛盾:显示的Java版本是10.0.2,但JAVA_HOME指向的是Java 11的OpenJDK,这种版本不一致也可能加剧问题。
解决方案
1. 升级Maven编译插件版本
在项目的pom.xml中,找到maven-compiler-plugin的配置,把版本升级到3.8.1及以上(这个版本开始完全支持Java 9+)。示例配置如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <!-- 指定和你实际环境一致的Java版本,比如10或者11 --> <source>10</source> <target>10</target> </configuration> </plugin> </plugins> </build>
如果是多模块项目,建议在父pom.xml中统一配置这个插件版本,避免每个子模块单独修改。
2. 统一Java环境配置
检查你的JAVA_HOME环境变量,确保它指向的JDK版本和java -version输出的版本一致:
- 如果你想使用Java 10:把
JAVA_HOME设置为Oracle JDK 10的路径,比如执行export JAVA_HOME=/path/to/java-10-oracle - 如果你想使用Java 11:确保
java -version输出的是OpenJDK 11,若不一致则调整环境变量
修改后执行mvn -v验证,确认Maven使用的Java版本和你配置的一致。
3. 重新执行构建命令
完成上述配置后,重新执行:
mvn clean install -DskipTests
内容的提问来源于stack exchange,提问作者Isuru Jayasinghe
相关产品推荐
相关产品推荐

