升级Java 17后JUnit测试报InaccessibleObjectException,Gradle配置无效
解决Java 17升级后JUnit测试的InaccessibleObjectException问题
问题根源
你在Gradle的test任务中通过doFirst块配置jvmArgs的方式,无法确保参数被正确传递给测试JVM进程。doFirst是任务执行前的动作,而jvmArgs属于任务的核心属性,直接配置才能生效。
修正后的Gradle配置
将jvmArgs从doFirst块中移出,直接配置在test任务下:
test { exclude 'com/corporative/**' maxHeapSize = "2048m" // 直接配置JVM参数,无需嵌套在doFirst内 jvmArgs "-javaagent:${configurations.testRuntimeClasspath.find { it.name.contains("jmockit") }.absolutePath}", '--add-opens', 'java.base/java.util=ALL-UNNAMED', '--add-opens', 'java.base/java.lang=ALL-UNNAMED' }
额外排查方向
- 若使用旧版Gradle,建议升级到7.3及以上版本(Java 17的适配要求),避免模块系统参数传递的兼容性问题。
- 执行
./gradlew test --info命令,查看实际传递给测试进程的JVM参数,确认--add-opens参数是否存在,排查是否被其他插件(如JaCoCo)覆盖。 - 验证jmockit的依赖路径是否正确,确保
configurations.testRuntimeClasspath能准确定位到对应的jar包,避免javaagent路径错误。
内容的提问来源于stack exchange,提问作者Arushi
相关产品推荐
相关产品推荐

