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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:29:10