Mac环境下生成Cobertura代码覆盖率报告时遭遇tools.jar缺失及JDK版本不匹配问题求助
解决Mac上生成Cobertura覆盖率报告的JDK版本不匹配与tools.jar缺失问题
嘿,我来帮你一步步拆解和解决这个问题~
一、为什么报错显示JDK15.0.2,但当前JVM用的是11.0.6?
这大概率是你的构建工具(Maven/Gradle)使用的JDK和系统默认JVM不一致导致的,毕竟构建过程依赖的JDK不一定和你终端java -version显示的一致。可以按以下步骤排查:
- 先在终端分别执行这两个命令,对比输出的JDK路径:
# 查看系统当前默认的JAVA_HOME echo $JAVA_HOME # 查看Maven实际使用的JDK(如果用Gradle就换成gradle -v) mvn -version - 如果发现Maven用的是15.0.2的JDK,那就要调整构建工具的JDK配置:
- 对于Maven:编辑
~/.mavenrc文件(没有就新建),添加指定JDK11的配置:echo 'export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.6.jdk/Contents/Home' >> ~/.mavenrc source ~/.mavenrc - 对于Gradle:编辑
~/.gradle/gradle.properties,添加:org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-11.0.6.jdk/Contents/Home
- 对于Maven:编辑
二、JDK11里找不到tools.jar是正常的!
从JDK 9开始,Oracle和OpenJDK都移除了tools.jar这个文件,原本在里面的类已经整合到JDK的模块化系统中了,所以你在JDK11的lib目录下找不到它完全是正常现象。
而报错里出现无法找到工件com.sun:tools:jar:0,主要是因为你用的Cobertura插件版本太旧,还在依赖这个过时的JAR包。解决办法有两个:
- 升级Cobertura插件到支持JDK9+的版本(最推荐)
比如在Maven的pom.xml里把插件版本改成3.1.1及以上:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>3.1.1</version> </plugin> - 如果暂时无法升级插件,可调整依赖配置(仅临时兼容方案)
在Maven依赖里把com.sun:tools:jar的范围设为system,适配JDK9+的模块化结构:<dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>11.0.6</version> <scope>system</scope> <systemPath>${java.home}/lib/jrt-fs.jar</systemPath> </dependency>
最后总结操作顺序
- 先确认并调整构建工具的JDK版本,让它和你预期的11.0.6一致
- 升级Cobertura插件到支持JDK9+的版本
- 重新执行生成覆盖率报告的命令,应该就能解决问题啦
内容的提问来源于stack exchange,提问作者harry123
相关产品推荐
相关产品推荐

