Spring Boot项目升级JDK8至JDK11后Groovy测试脚本编译失败求助
解决JDK11升级后Groovy测试编译失败(Missing JAXB类)的问题
这个问题的核心其实是两方面叠加导致的:一是JDK11移除了JDK8中内置的Java EE模块(包括JAXB),二是你当前使用的gmaven-plugin和Groovy版本太老,对JDK11兼容性极差,而且没正确加载到你添加的JAXB依赖。下面给你一步步的解决方案:
1. 替换为维护中的gmavenplus-plugin
gmaven-plugin已经停止维护好几年了,完全跟不上新版本JDK的节奏,建议直接替换成它的继任者gmavenplus-plugin,这个插件一直在更新,对JDK8+的支持都很完善。
2. 升级Groovy到支持JDK11的版本
你现在用的Groovy 2.3.8是2015年的版本,根本不支持JDK11,至少要升级到Groovy 3.0+(推荐3.0.17这类稳定版本),才能和JDK11兼容。
3. 调整JAXB依赖,确保插件能访问到
项目里加的JAXB依赖可能没被测试编译插件加载到——因为Maven插件的运行classpath和项目依赖是隔离的,所以需要把JAXB依赖也加到插件的依赖配置里,同时补充JAXB 2.3.x必需的激活API依赖。
修改后的完整Pom配置示例
<!-- 替换原gmaven-plugin为gmavenplus-plugin --> <plugin> <groupId>org.codehaus.gmavenplus</groupId> <artifactId>gmavenplus-plugin</artifactId> <version>1.12.1</version> <!-- 使用最新稳定版 --> <executions> <execution> <goals> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <source>11</source> <!-- 匹配你的JDK11版本 --> <target>11</target> <groovyVersion>3.0.17</groovyVersion> <!-- 指定兼容JDK11的Groovy版本 --> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>3.0.17</version> <type>pom</type> </dependency> <!-- 把JAXB依赖加到插件依赖中,确保编译时能访问到 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.8</version> <!-- 升级到和jaxb-api匹配的版本 --> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>javax.activation-api</artifactId> <version>1.2.0</version> <!-- JAXB 2.3.x必须依赖的激活API --> </dependency> </dependencies> </plugin> <!-- 项目中的JAXB依赖可以保留,测试用的话设为test作用域即可 --> <dependencies> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.8</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>javax.activation-api</artifactId> <version>1.2.0</version> <scope>test</scope> </dependency> </dependencies>
关键调整说明
- 插件替换:
gmavenplus-plugin是官方推荐的替代方案,持续维护,完美支持JDK8到JDK17+ - Groovy版本升级:Groovy 3.x重构了底层逻辑,完全适配JDK11的模块系统,解决旧版本的兼容性报错
- 依赖补充:把JAXB相关依赖加到插件的依赖里,解决插件编译时找不到类的问题;同时补充
javax.activation-api,这是JAXB 2.3.x的必需依赖 - 版本对齐:source/target设置为11,和你的JDK版本保持一致,避免编译时的版本不一致问题
配置完之后,运行mvn test-compile应该就能顺利通过编译了。
内容的提问来源于stack exchange,提问作者Mahesh Revaskar
相关产品推荐
相关产品推荐

