Cobertura 覆盖失败

问题描述

我遇到了类似于 [https://stackoverflow.com/questions/25432810/error-when-trying-to-use-org-codehaus-mojocobertura-maven-plugin2-6] 的问题。

日志: 目标 org.codehaus.mojo 的执行 default-cli:cobertura-maven-plugin:2.6:instrument Failed: Plugin org.codehaus.mojo:cobertura-maven-plugin:2.6 或其依赖项之一无法解析:找不到artifact com.sun:tools:jar:0 在指定路径 /usr/local/Cellar/openjdk/15.0.2/libexec/openjdk.jdk/Contents/Home/../lib/tools.jar

研究:

当我执行 java --version 时,我得到: java 11.0.6 2020-01-14 LTS

搜索 SO 后,我发现由于我使用的是 JDK 11,因此 tools.jar 已被删除 [https://stackoverflow.com/a/60549167/13241701]。当我运行 jacoco 时,测试用例会运行。但是

问题:我只想报告 cobertura 覆盖率报告。

我能得到一些帮助吗?

解决方法

我建议使用插件的最新版本,它是 2.7 并且内置了针对 Java 11 的修复。

如果您由于某种原因无法使用最新的插件,可以尝试以下一些方法

使用 'mvn dependency:tree' 查找调用该 jar 的位置并像这样排除它

catch

或者你可以在你的 mvn 中引用它

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>${struts2.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>tools</artifactId>
            <groupId>com.sun</groupId>
        </exclusion>
    </exclusions>
</dependency>

其中系统路径是指向您的库的链接

另一种方法是提供 jdk vm 作为运行参数

<dependency>
   <groupId>com.sun</groupId>
   <artifactId>tools</artifactId>
   <version>1.6</version>
   <scope>system</scope>
   <systemPath>C:\Program Files\Java\jdk1.11.6\lib\tools.jar</systemPath>
 </dependency>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...