当前位置: 首页 > 知识库问答 >
问题:

无法运行jacoco代码覆盖率工具

华永新
2023-03-14

我有一个maven项目(link),我想在上面运行代码覆盖率。

我在主项目pom文件上运行了命令mvn test-Pcoverage jacoco:prepare agent jacoco:report,但没有生成报告。相反,我得到的警告是

[INFO] --- jacoco-maven-plugin:0.7.7.201606060606:report (post-test) @ pulsar-discovery-service ---
[INFO] Skipping JaCoCo execution due to missing execution data file.
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.7.201606060606:prepare-agent (default-cli) @ pulsar-discovery-service ---
[INFO] argLine set to -javaagent:/home/jai1/.m2/repository/org/jacoco/org.jacoco.agent/0.7.7.201606060606/org.jacoco.agent-0.7.7.201606060606-runtime.jar=destfile=/home/jai1/pulsar/pulsar-discovery-service/target/jacoco.exec
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.7.201606060606:report (default-cli) @ pulsar-discovery-service ---
[INFO] Skipping JaCoCo execution due to missing execution data file.

有人能建议我如何用这个pom文件生成代码覆盖率报告吗。我正在使用apache-maven-3.3。9和testNG。

共有3个答案

景辰钊
2023-03-14
It seems like you are missing below line in pom.xml 
<destFile>
   ${project.build.directory}/coverage-reports/jacoco-unit.exec
</destFile>
 <plugin>
           <groupId>org.jacoco</groupId>
           <artifactId>jacoco-maven-plugin</artifactId>
           <version>0.7.1.201405082137</version>
            <executions>
                  <execution>
                      <id>prepare-jacoco-4-unit-tests</id>
                      <goals>
                           <goal>prepare-agent</goal>
                      </goals>
                      <configuration>
          <!-- Sets the path to the file which contains the execution data. -->
         <destFile>
             ${project.build.directory}/coverage-reports/jacoco-unit.exec
         </destFile>                                             
         <propertyName>jacocoArgLine</propertyName>
         </configuration>
         </execution>

            <execution>
                <id>create-jacoco-reports-4-unit-tests</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>report</goal>
                </goals>
               <configuration>
           <!-- Sets the path to the file which contains the execution data. -->
          <dataFile>
              ${project.build.directory}/coverage-reports/jacoco-unit.exec
          </dataFile>
          </configuration>
          </execution>
  </executions>
  </plugin>

然后在maven surefire插件中,应定义以下内容:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>2.17</version>
     <configuration>
         <skipTests>${skipUnitTests}</skipTests>
         <argLine>${jacocoArgLine}</argLine>
     </configuration>
</plugin>
胡玉书
2023-03-14

以下是对我们有效的方法:

设置一些属性:

<properties>
    ...
    <!-- versions below are last ones that are Java 6 compatible -->
    <version.jacoco-agent>0.7.4.201502262128</version.jacoco-agent>
    <jacocoArgLine />
    <surefire.base.argLine>-XX:-UseSplitVerifier -XX:MaxPermSize=384m -Xmx1024m -Djava.awt.headless=true</surefire.base.argLine>
    ...
</properties>

以及覆盖范围配置文件:

    <profile>
        <id>coverage</id>
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${surefire.plugin.version}</version>
                        <configuration>
                            <argLine>${surefire.base.argLine} @{jacocoArgLine}</argLine>
                            <systemPropertyVariables>
                                <java.awt.headless>true</java.awt.headless>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>prepare-agent</goal>
                                <goal>report</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
谷泽宇
2023-03-14

你的pom。xml包含

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
      <argLine> -Xmx2G -XX:MaxDirectMemorySize=8G
        -Dio.netty.leakDetectionLevel=advanced</argLine>
    </configuration>
  </plugin>

而JaCoCo留档为准备代理目标状态

如果您的项目已经为测试执行定义了VM参数,请确保它们将包括由JaCoCo定义的属性。

... 将“argLine”定义为Maven属性,而不是Maven surefire插件配置的一部分:

  <properties>
    <argLine>-your -extra -arguments</argLine>
  </properties>
  ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <!-- no argLine here -->
    </configuration>
  </plugin>
 类似资料:
  • 我正在使用Android Studio 1.2。2和Gradle插件1.2。3. 我正在尝试生成代码覆盖率报告,而不运行,只运行。我希望避免需要连接设备或模拟器,这样我就可以加快Jenkins服务器上的构建速度。 到目前为止,我所能做的最好的事情就是在报告中包含单元测试执行数据,如下所述:Android Studio中的Jacoco代码覆盖。这对于显示所有测试的结果很有用,但是目前我只想运行单元测

  • 我在声纳中的代码覆盖率显示为0%,这不是真的,因为我有单元测试。 格拉德尔 当我打开inside然后我可以看到成功的单元测试。 我在Jenkins环境中运行作为

  • 我的代码运行在具有单独JVM的单独虚拟机上。我想在此虚拟机上以tcpserver模式设置JaCoCo代理以收集覆盖率数据。然后,我将在我的maven项目中以tcpclient模式设置JaCoCo代理,以连接到上面提到的VM并获取覆盖率数据。 问题是代理不收集任何覆盖数据。在中创建了覆盖率数据文件,但该文件为空。 下面是代理选项:-Java agent:/usr/xx/plugins/org . j

  • 我正在尝试使用JaCoCo-javaagent传递VM参数来获得代码覆盖率 -Java agent:/test/jaco co/jaco agent . jar = dest file =/test/jaco co/jaco co . exec,includes=com。*,append=true 我能在jacoco中获得一些价值。执行文件,但无法获取覆盖率报告。我怎样才能把jacoco转化成。执

  • 我正在做一个大学项目,我需要覆盖当地法规,看看我的测试是否做得好。然而,netbeans控制台保持 --- jaco-maven-plugin:0.7.7.201606060606:报告(报告) @ 客户端服务提供器---由于缺少执行数据文件而跳过 JaCoCo 执行。 这是我的pom.xml

  • 我正在尝试生成Jacoco代码覆盖率报告。我已经将AndroidTestCase用于我的测试类。 在过去几天里,我已经关注了堆栈溢出的各种公认答案。结果是否定的。 我的分级文件: