OpenJDK8升级到16报Unsupported class file major version 60及Jacoco错误如何解决
"Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 60"
java.lang.instrument.IllegalClassFormatException: Error while instrumenting sun/security/ec/SunEC$1.
以上两个报错均由当前使用的Jacoco 0.8.4版本不兼容Java 16导致:Java 16对应的类文件主版本号为60,Jacoco 0.8.4最高仅支持到Java 14,无法识别高版本类结构,对JDK内部类执行插桩操作时就会触发上述异常。你使用的Gradle 7.2本身原生兼容Java 16,无需调整Gradle版本,按以下步骤处理即可:
解决步骤
- 升级Jacoco版本到0.8.7及以上,该版本为首个正式支持Java 16的Jacoco稳定版。Gradle环境下直接修改根build.gradle中的Jacoco配置:
jacoco { toolVersion = "0.8.7" }
- 清理本地构建缓存,执行对应命令删除旧构建产物和插桩缓存:
- Linux/macOS环境执行:
./gradlew clean - Windows环境执行:
gradlew clean
- Linux/macOS环境执行:
- 重新执行构建、测试及覆盖率统计任务,验证报错是否消失。
可选优化配置
如果升级后仍偶发JDK内部类插桩报错,可配置Jacoco排除JDK内部包的插桩规则,无需统计JDK内部类的覆盖率:
test { jacoco { excludes = ['sun/**', 'jdk/internal/**', 'com/sun/**'] } }
内容的提问来源于stack exchange,提问作者Ramu Smartguy
相关产品推荐
相关产品推荐

