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

JDK8升级至JDK17时Maven构建失败问题求助

JDK 8升级到17后Maven构建失败的解决方法

1. 修复Surefire插件兼容性问题

JDK 17与maven-surefire-plugin:2.19.1完全不兼容,3.0.0-M3作为早期预览版对JDK 17的支持也不完善。直接升级到稳定支持JDK 17的版本(如3.2.5及以上),修改pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.2.5</version>
        </plugin>
    </plugins>
</build>

2. 排查并修复测试失败问题

升级JDK后测试失败常见原因及解决方式:

  • API兼容性问题:JDK 9+移除/修改了部分旧API(如sun.misc下的类),查看测试失败堆栈,替换为JDK 17兼容的API。
  • 模块系统限制:若项目使用JPMS,需在module-info.java中声明测试依赖的模块,例如requires junit.jupiter.api;。
  • 测试框架版本兼容:JUnit 4.x低版本与JDK 17不兼容,建议升级到4.13.2+,或迁移至JUnit 5(对JDK 17支持更完善)。
  • 反射访问权限问题:JDK 9+加强了模块访问控制,测试中若用到反射访问私有成员,需在Surefire插件中添加JVM参数:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.5</version>
    <configuration>
        <argLine>
            --add-opens java.base/java.lang=ALL-UNNAMED
            --add-opens java.base/java.util=ALL-UNNAMED
            <!-- 根据实际报错补充对应的opens参数 -->
        </argLine>
    </configuration>
</plugin>

3. 分步验证

  • 先执行mvn clean test -DskipTests确认插件修复后项目能正常编译。
  • 移除-DskipTests参数,根据测试失败日志逐一修复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:32:40