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

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
      

二、JDK11里找不到tools.jar是正常的!

从JDK 9开始,Oracle和OpenJDK都移除了tools.jar这个文件,原本在里面的类已经整合到JDK的模块化系统中了,所以你在JDK11的lib目录下找不到它完全是正常现象。

而报错里出现无法找到工件com.sun:tools:jar:0,主要是因为你用的Cobertura插件版本太旧,还在依赖这个过时的JAR包。解决办法有两个:

  1. 升级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>
    
  2. 如果暂时无法升级插件,可调整依赖配置(仅临时兼容方案)
    在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>
    

最后总结操作顺序

  1. 先确认并调整构建工具的JDK版本,让它和你预期的11.0.6一致
  2. 升级Cobertura插件到支持JDK9+的版本
  3. 重新执行生成覆盖率报告的命令,应该就能解决问题啦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:57:38