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

升级JDK17后JacocoTestReport任务执行失败求助

JDK17 + JaCoCo 0.8.7 构建报错解决方案

错误原因

JDK17的模块化系统(JPMS)限制了模块内部包的访问权限,JaCoCo 0.8.7在创建IsolatedAntBuilder时,会反射访问java.util.prefs的私有字段,但java.prefs模块默认没把这个包开放给未命名模块(JaCoCo相关代码运行在未命名模块中),所以抛出InaccessibleObjectException。

解决方法

1. 升级JaCoCo版本

JaCoCo 0.8.7对JDK17的支持不足,直接升级到0.8.8及以上版本(推荐0.8.10),后续版本已经修复了模块系统相关的访问问题。在Gradle构建脚本中修改版本:

jacoco {
    toolVersion = "0.8.10"
}

2. 添加JVM参数开放模块权限

如果暂时不想升级JaCoCo,给Gradle构建添加JVM参数,让java.prefs模块开放java.util.prefs包给所有未命名模块:

  • 方式一:在项目根目录的gradle.properties中添加:
    org.gradle.jvmargs=--add-opens java.prefs/java.util.prefs=ALL-UNNAMED
    
  • 方式二:在构建脚本中针对相关任务配置:
    // 给测试任务添加参数
    tasks.withType(Test) {
        jacoco {
            jvmArgs += '--add-opens java.prefs/java.util.prefs=ALL-UNNAMED'
        }
    }
    
    // 给JaCoCo报告和验证任务添加参数
    tasks.withType(JacocoReport) {
        jvmArgs += '--add-opens java.prefs/java.util.prefs=ALL-UNNAMED'
    }
    
    tasks.withType(JacocoCoverageVerification) {
        jvmArgs += '--add-opens java.prefs/java.util.prefs=ALL-UNNAMED'
    }
    

3. 升级Gradle版本

低版本Gradle和JDK17的模块化系统存在兼容性问题,导致Ant Builder创建失败。确保使用Gradle 7.0及以上版本,比如用命令升级Gradle wrapper:

./gradlew wrapper --gradle-version 7.6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:52:54