执行 JaCoCo 时出现“由于缺少执行数据文件而跳过 JaCoCo 执行”

Getting "Skipping JaCoCo execution due to missing execution data file" upon executing JaCoCo

提问人:Dave 提问时间:8/7/2013 最后编辑:sɐunıɔןɐqɐpDave 更新时间:11/12/2023 访问量:244126

问:

我正在使用 Maven 3.0.3、JUnit 4.8.1 和 Jacoco 0.6.3.201306030806,我正在尝试创建测试覆盖率报告。

我有一个只有单元测试的项目,但我无法运行报告,我反复收到错误:当我运行时:Skipping JaCoCo execution due to missing execution data file

mvn clean install -P test-coverage

以下是我的 pom 的配置方式:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.14.1</version>
  <configuration>
    <reuseForks>true</reuseForks>
    <argLine>-Xmx2048m</argLine>
  </configuration>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.14.1</version>
  <configuration>
    <reuseForks>true</reuseForks>
    <argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
</plugin>
...
<profile>
  <id>test-coverage</id>
  <build>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.6.3.201306030806</version>
        <configuration>
          <destfile>${basedir}/target/coverage-reports/jacoco-unit.exec</destfile>
          <datafile>${basedir}/target/coverage-reports/jacoco-unit.exec</datafile>
        </configuration>
        <executions>
          <execution>
            <id>prepare-unit-tests</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <!-- prepare agent for measuring integration tests -->
          <execution>
            <id>prepare-integration-tests</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
              <propertyName>itCoverageAgent</propertyName>
            </configuration>
          </execution>
          <execution>
            <id>jacoco-site</id>
            <phase>verify</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

我的所有测试都成功运行。以下是 Maven 的一些输出:

[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-unit-tests) @ myproject ---
[INFO] argLine set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO] 
    ...
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0

[INFO]
    ...
[INFO] 
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-integration-tests) @ myproject ---
[INFO] itCoverageAgent set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec 
[INFO] 
[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (default) @ myproject ---
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO] 
[INFO] --- maven-failsafe-plugin:2.14.1:verify (default) @ myproject ---
[INFO] Failsafe report directory: /Users/davea/Dropbox/workspace/myproject/target/failsafe-reports
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO] 
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (jacoco-site) @ myproject ---
[INFO] Skipping JaCoCo execution due to missing execution data file
[INFO] 

任何想法我错过了什么配置?

Maven junit jacoco

评论

1赞 rogerdpack 5/1/2015
另请参阅 stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
0赞 MarkHu 2/25/2017
似乎你的 pom 中也有集成测试,这可能会分散注意力。此外,我们剥离了 并让它写入默认的 target/jacoco.exec 文件。destFile
0赞 Shivkumar Kawtikwar 4/18/2019
我已经在这个位置发布了答案。
0赞 Dhaval D 5/20/2021
一个很好的解释和答案,为我解决了问题。

答:

1赞 tdrury 8/9/2013 #1

执行说它将 jacoco 数据放在 /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec 中,但您的 maven 配置正在 ${basedir}/target/coverage-reports/jacoco-unit.exec 中查找数据。

评论

1赞 Dave 8/9/2013
是的,那么为什么插件会忽略我在配置中指定的内容呢?
0赞 tdrury 8/9/2013
尝试将 destfile 配置移动到 prepare-agent 执行的配置中。并非所有 maven 插件都能优雅地处理配置继承。
4赞 BoneGoat 9/25/2013 #2

Fwhhat tdrury 说:

将您的插件配置更改为:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.3.201306030806</version>
    <executions>
      <!-- prepare agent for measuring integration tests -->
      <execution>
        <id>prepare-integration-tests</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
        <configuration>
          <destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
        </configuration>
      </execution>
      <execution>
        <id>jacoco-site</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report</goal>
        </goals>
        <configuration>
          <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
        </configuration>
      </execution>
    </executions>
  </plugin>

编辑: 刚刚注意到一件重要的事情,destFile 和 dataFile 似乎区分大小写,所以它应该是 destFile,而不是 destfile。

19赞 Atish Narlawar 2/8/2014 #3

可能存在以下情况:pom 中的其他 argline 设置或插件可能会覆盖 jacoco 执行顺序设置。

argLine 设置为 -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec

其中一个例子

           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <forkCount>5</forkCount>
                    <reuseForks>true</reuseForks>
                    <argLine>-Dnet.sf.ehcache.disabled=true</argLine>
                </configuration>
            </plugin>

从这些插件中摆脱 argLine 后,jacoco 开始正常工作。

评论

0赞 hawkeye 3/9/2022
注意 forkcount!
203赞 Jacek Laskowski 5/12/2014 #4

jacoco-maven-插件:0.7.10-快照

来自 jacoco:prepare-agent 说:

在 maven-surefire-plugin 的情况下,执行此操作的方法之一是 使用语法进行后期属性评估:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>@{argLine} -your -extra -arguments</argLine>
  </configuration>
</plugin>

请注意,它已添加到 .@{argLine}-your -extra -arguments

感谢 Slava Semushin 注意到这一变化并在评论中进行了报道

jacoco-maven-插件:0.7.2-快照

以下 jacoco:prepare-agent 说:

[org.jacoco:jacoco-maven-plugin:0.7.2-SNAPSHOT:prepare-agent]准备一个指向 JaCoCo 运行时代理的属性,该代理可以是 作为 VM 参数传递给受测应用程序。根据 项目打包类型:默认情况下具有以下内容的属性 名称已设置:

  • tycho.testArgLine 用于打包类型 eclipse-test-plugin 和
  • argLine 否则。

请注意,这些属性不得被 测试配置,否则无法附加 JaCoCo 代理。如果 您需要自定义参数,请附加它们。例如:

<argLine>${argLine} -your -extra -arguments</argLine>

导致 覆盖率信息在执行期间收集,默认情况下 在进程终止时写入文件。

您应该在插件配置中更改以下行(注意内部):maven-surefire-plugin${argLine}<argLine>

<argLine>-Xmx2048m</argLine>

<argLine>${argLine} -Xmx2048m</argLine>

还要对其他插件进行必要的更改并替换以下内容(再次注意):maven-failsafe-plugin${argLine}

<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>

<argLine>${argLine} -Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>

评论

0赞 Andreas 8/6/2014
但是现在,出现了这个问题,如果没有 jacoco 目标,构建就会失败。
1赞 Slava Semushin 3/25/2017
引用的链接现在有一个不同的建议。@{argLine}
3赞 RenatoIvancic 7/9/2018
这正是我的问题。我在 mvn 命令中有自定义参数。我没有明确声明 maven-surefire-plugin 并设置配置。我只是在 maven 命令行中添加 argLine 占位符,例如 .现在生成 jacoco.exec 文件,并在声纳中生成覆盖率报告。mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"mvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
1赞 Massimo Da Ros 9/19/2019
它的工作原理!!问题是由于我在 maven-surefire-plugin 上添加了 <argLine> 配置,以增加集成测试的内存 配置 <argLine>${argLine} --my--additional-arguments--here-- </argLine> 解决了这个问题
1赞 BrunoPugliese 4/24/2023
如果使用 <argLine>这是要走的路。救了我:)
45赞 Chad Van De Hey 12/7/2016 #5

我遇到了一些不同的问题,返回了相同的错误。

Skipping JaCoCo execution due to missing execution data /target/jacoco.exec

事实是,返回此错误的原因有很多很多。 我们在 Stack Overflow 上尝试了不同的解决方案,但发现这个资源是最好的。它拆解了 Jacoco 可能返回相同错误的许多不同的潜在原因。

对我们来说,解决方案是在配置中添加一个 prepare-agent。

<execution>
   <id>default-prepare-agent</id>
   <goals>
       <goal>prepare-agent</goal>
   </goals>
</execution>

我想大多数用户会因为不同的原因而体验它,所以看看前面提到的资源!

评论

3赞 tuan.dinh 11/20/2018
我想你搞定了。人们可能会在谷歌上搜索它以获得“快速修复”,但最正确的答案是“事实是,由于很多很多原因返回了这个错误”。只需要找出那是什么。对我来说,这是一个父 pom 覆盖了 maven-surefire-plugin 中的 <argLine>。
0赞 Roger Worrell 5/1/2019
这!谢谢。我收到了相同的消息,但这是因为我的 surefire 插件只查找在我的测试类被命名时命名的文件**/*Test.java*Tests.java
0赞 Jose Quijada 6/24/2019
我有两个问题:1.没有任何测试类,至少需要一个类,以及一个注释的测试方法,以便Jacoco可以做一些事情。2. 在我的项目的 Travis 环境变量中,有错别字,应该命名为 。在此处查看 Travis 文档,搜索 .修复后,构建成功运行。您可以查看我的 gitbhub 项目*Test.java@TestSONART_TOKEN=*****SONAR_TOKEN=*****or define SONAR_TOKEN in your Repository Settings
1赞 Joe Atzberger 6/11/2022
链接现在转到一个有问题的内容场。
0赞 Sudhir 6/21/2022
使用 archive.org 链接 - web.archive.org/web/20190719060500/www.ffbit.com/blog/2014/05/...
7赞 Always a newComer 3/6/2017 #6

我知道这个问题已经很老了,但如果像我这样的人来这里寻找答案,那么这可能会有所帮助。我已经能够用这个克服上述错误。

1) 从插件中删除以下代码 maven-surefire-plugin

 <reuseForks>true</reuseForks>
 <argLine>-Xmx2048m</argLine>

2) 添加以下目标:

<execution>
<id>default-prepare-agent</id>
<goals>
   <goal>prepare-agent</goal>
</goals>
</execution>
33赞 Tanya Jivvca 10/10/2017 #7

由于项目中缺少测试,还可能收到“由于缺少执行数据文件而跳过 JaCoCo 执行”错误。例如,当您启动新项目并且根本没有 *Test.java 文件时。

评论

2赞 voidMainReturn 3/3/2022
这是金子!帮助了我
0赞 jpl 12/2/2017 #8

我的回复很晚了,但对于其他用户 在您的情况下,您必须配置故障安全插入,以使用保存在 itCoverageAgent 变量中的命令行代理配置。 举例来说

<configuration>
    <argLine>${itCoverageAgent}</argLine>
</configuration>

在 maven 配置中,jacoco 在 prepare-agent 阶段准备命令行参数,但故障安全插件不使用它,因此没有执行数据文件。

1赞 tm1701 5/10/2018 #9

我添加了一个具有 1 个 Domain 类的 Maven/Java 项目,具有以下功能:

  • 使用插件 Surefire 和 Failsafe 进行单元或集成测试
  • 查找错误。
  • 通过 Jacoco 进行测试覆盖。

Jacoco的结果在哪里?测试并运行 'mvn clean' 后,您可以在 'target/site/jacoco/index.html' 中找到结果。在浏览器中打开此文件。

享受!

我试图让这个项目尽可能简单。该项目将这些帖子中的许多建议放在一个示例项目中。谢谢贡献者!

评论

0赞 Nagaraj Vittal 2/21/2019
我尝试了您的 git 项目,但不清楚如何查看报告。
0赞 tm1701 2/22/2019
Jacoco的结果在哪里?测试并运行 'mvn clean' 后,您可以在 'target/site/jacoco/index.html' 中找到结果。在浏览器中打开此文件。
0赞 Wolfgang Fahl 6/26/2019
您可能希望将存储库链接回 stackoverflow。在您的演示中发现错误后,我很难再次找到问题。
0赞 Wolfgang Fahl 6/26/2019
并且仍然无法按预期工作:-(目标目录只有 aggregate.exec 作为执行 MVN 全新安装时的内容......
4赞 xiaoLiuLiu 1/29/2019 #10

尝试使用:

mvn jacoco:report -debug

以查看有关报告流程的详细信息。

我是这样配置我的jacoco的:

<configuration>
    <dataFile>~/jacoco.exec</dataFile>
    <outputDirectory>~/jacoco</outputDirectory>
</configuration>

然后使用默认配置显示它,这意味着不在 中。错误说.mvn jacoco:report -debugjacoco.exec~/jacoco.execmissing execution data file

因此,只需使用默认配置:

<execution>
    <id>default-report</id>
    <goals>
    </goals>
    <configuration>
        <dataFile>${project.build.directory}/jacoco.exec</dataFile>
        <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory>
    </configuration>
</execution>

一切正常。

0赞 Srini M 1/31/2019 #11

有时执行第一次运行,当我们执行 maven 全新安装时,它不会在那之后生成。 问题在于对 skipMain 和 skip 属性使用 true 在主 pom 文件的 maven-compiler-plugin 下。 如果它们是作为任何问题或建议的一部分引入的,请将其删除。

7赞 Pawel Kruszewski 5/11/2019 #12

我已经尝试了所有答案,但只有以下建议组合对我有用。为什么?我有非常具体的要求:

  1. 从命令行运行构建时,JaCoCo 会生成报告:(Maven 3.6.0)mvn clean verify
  2. Intellij IDEA (2019.01) 也运行我的测试
  3. 这一切都在插件中定义的另一个存在的情况下工作javaagentsurefire

解决方案 - 在配置中附加“延迟替换”maven 属性的值,如常见问题解答中所述(我的固定配置argLinesurefire@{...}surefire)

如何在 argLine 中使用其他插件设置的属性? Maven 对

${...} 在运行任何插件之前,pom.xml 中的值。因此,Surefire 永远不会在其 argLine 属性中看到占位符。 从版本 2.17 开始对这些属性使用备用语法,

@{...} 允许在执行插件时延迟替换属性,因此被其他插件修改的属性将被正确拾取。

第一次尝试失败 - 在 jacocoprepare-agent 目标配置中定义 jaCoCoArgLine 属性 - 场景失败了我的第二个要求,IntelliJ IDEA 无法找出我在项目中用于静态方法模拟的 jmockit 的代理

评论

2赞 Karthik Rao 7/22/2020
与JMockit一起使用时遇到了同样的问题,并且能够使用此解决方案解决问题。即在 surefire 插件中添加 argLine
4赞 Jianwu Chen 8/19/2019 #13

我挣扎了好几天。我尝试了此线程中建议的所有不同配置。它们都不起作用。最后,我发现只有重要的配置是 prepare-agent 目标。但你必须把它放在正确的阶段。我看到很多例子把它放在“预集成测试”中,这是一个误导,因为它只会在单元测试后执行。因此,不会检测单元测试。

正确的配置应该只使用默认阶段(不要显式指定阶段)。通常,您不需要围绕 maven-surefire-plugin 进行大量处理。

  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.4</version>
    <executions>
      <execution>
        <id>default-prepare-agent</id>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>jacoco-site</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
5赞 afkbrb 1/5/2020 #14

刚才遇到了同样的问题。

我有一个名为 的类,我为它创建了一个名为 的测试类,然后我得到了输出HelloWorldHelloWorldTestsSkipping JaCoCo execution due to missing execution data file.

然后我试图改变我的以使其工作,但尝试失败了。pom.xml

最后,我简单地重命名为 ,它就起作用了!HelloWorldTestsHelloWorldTest

所以我猜,默认情况下,jacoco 只识别名为 like 的测试类,这表明它是 的测试类。因此,只需将您的测试类重命名为这种格式就可以了!XxxTestXxx

0赞 Pavan Kumar 3/27/2020 #15

就我而言,准备代理的配置不同,但相应地必须使用报告进行配置,但缺少此配置。添加后,它开始正常工作。destFiledataFiledataFile

2赞 Manoel Campos 8/19/2020 #16

如果项目的路径在任何地方都有空格,就会发生这种情况,例如:

/home/user/my projects/awesome project

不会生成报告。如果是这种情况,请从目录名称中删除这些空格,例如:

/home/user/my-projects/awesome-project

或者将项目移动到沿途没有空格的目录。

关于插件配置,我只需要以下基本配置:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.5</version>
    <executions>
        <execution>
            <id>jacoco-initialize</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>jacoco-report</id>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>       
</plugin>
9赞 Jess Chen 11/24/2020 #17

使用 maven-surefire-plugin 或 maven-failsafe-plugin 时,不得使用 forkCount 为 0 或将 forkMode 设置为 never,因为这会阻止在设置了 javaagent 的情况下执行测试,并且不会记录覆盖率。

编号: https://www.eclemma.org/jacoco/trunk/doc/maven.html

这是我的要点

6赞 Waqar Detho 5/12/2021 #18

我遇到了同样的问题。我将 Jacoco 版本从 0.6 更新到 0.8,并更新了 surefire 插件。以下命令在 site/jacoco/ 文件夹中生成 Jacoco 报告:

mvn clean jacoco:prepare-agent install jacoco:report

我的 maven 配置如下:

<plugins>
    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.6</version>
        <executions>
            <execution>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <execution>
                <id>jacoco-report</id>
                <phase>test</phase>
                <goals>
                    <goal>report</goal>
                </goals>
                    </execution>
            <execution>
                <id>jacoco-check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                    <rules>
                        <rule>
                            <element>PACKAGE</element>
                            <limits>
                                <limit>
                                    <counter>LINE</counter>
                                    <value>COVEREDRATIO</value>
                                    <minimum>0.0</minimum>
                                </limit>
                            </limits>
                        </rule>
                    </rules>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M5</version>
        <configuration>
            <forkedProcessExitTimeoutInSeconds>60</forkedProcessExitTimeoutInSeconds>
            <forkCount>1</forkCount>
        </configuration>
    </plugin>
</plugins>

评论

1赞 hawkeye 3/9/2022
注意 forkcount!
0赞 S. Nabil 6/1/2022
谢谢!这对我有用,但是您能详细说明一下为什么您有 forkcount 配置和 forkedProcessExitTimeOut 吗?
3赞 Dylan Callaghan 8/31/2021 #19

我知道这已经晚了,但只是对于其他任何有这个问题的人,似乎没有什么可以解决它(就像我一样)。确保在你的 pom 中,你对 jacoco 的配置不是反过来在里面。似乎 maven 的某种默认设置是将 .这在您尝试添加详细配置(如 jacoco)之前几乎不会引起注意。为了添加这些内容,您需要将它们添加到 之外,否则它们将被有效地忽略。有关详细信息,请参阅下面的我的绒球。pluginspluginManagementpluginspluginManagementpluginManagement

我的旧绒球(给了“跳过 jacoco ......”留言内容):

<project>
  ...
  <build>
    <pluginManagement>
      <plugins>
        ...
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.2</version>
          <executions>
            <execution>
              <id>default-prepare-agent</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>default-report</id>
              <phase>test</phase>
              <goals>
                <goal>report</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

我的新 pom(现在编译一个有效的 jacoco 报告):

<project>
  ...
  <build>
    <pluginManagement>
      <plugins>
        ...
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <executions>
            <execution>
              <id>default-prepare-agent</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>default-report</id>
              <phase>test</phase>
              <goals>
                <goal>report</goal>
              </goals>
            </execution>
          </executions>
      </plugin>
    </plugins>
  </build>
</project>
1赞 Stephan 12/21/2021 #20

我遇到了类似的错误,因为跳过了测试执行。

我使用类似的系统参数运行了我的构建:-Dmaven.test.skip.exec=true

转动此系统参数即可解决问题。false

3赞 Kenany 4/28/2022 #21

Jacoco 执行数据文件是一个 jacoco.exec 文件,在准备代理目标运行时生成。如果未生成 It 或未在配置中设置正确的路径,则会收到该错误消息。因为 Jacoco 使用它来构建测试覆盖率。这通常发生在使用 jacoco maven 插件和 surfire 或故障保护时。要确保生成 jacoco.exec 文件,您必须在 pom.xml 文件中添加 argline,而不是在 surfire 配置中,而是在 pom.xml 文件中的 properties 标记中。

<properties>
    <argLine>-Xmx2048m</argLine>
</properties>
         

评论

0赞 Optimus Prime 12/19/2022
第一个答案,我也找到了关于错误含义的解释。
0赞 jdk 11/1/2022 #22

我刚刚从标签中删除了以下两行properties

<jacoco.ut.reportPath>${project.basedir}/../target/jacoco.exec</jacoco.ut.reportPath>
<sonar.jacoco.reportPaths>${project.basedir}/target/jacoco.exec</sonar.jacoco.reportPaths>

mvn install -Psonar默认情况下,在目标目录中创建 Jacoco.exec,因此在我的情况下不需要显式路径。

0赞 user16606026 11/3/2022 #23

对于遇到类似问题的其他人,这是另一种可能的解决方案:

我们的项目在繁体中文版本的 Windows 中运行,当我们检查 maven 日志中的部分时,我们发现它试图通过而不是 .我认为路径中的 UTF-8 符号让 Jacoco 变得很奇怪。我们将项目移至其他地方,问题已解决。prepare-agent\桌面\...\project\...\Desktop\...\project\...

TL的;博士: 也检查在此期间准备的日志。prepare-agentjacoco.exec

1赞 dan 1/12/2023 #24

2 其他可能性

JaCoCo 的 Maven 插件可以更好地与 Maven 集成,以提供有关其调用和错误调用的更多信息。尽管如此。

可能性#1:Surefire插件中的自定义参数

在我的项目中使用JPMS模块,使用标准的Maven目录布局,基本的JSE 11程序,JUnit 5和JaCoCo,以及Eclipse和单个文件(Eclipse 4.13不允许在项目的类路径根目录中使用2个文件)。为了让 Surefire 看到我的测试用例,我必须使用单个标签来允许 Surefire 使用以下命令获得访问权限: 对于所有具有单元测试的软件包:module-info.javamodule-info.java<argLine>--add-opens

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
   <configuration>
      <argLine>
         @{argLine}
         --add-opens module_name/com.myco.project=ALL-UNNAMED
         --add-opens module_name/com.myco.project.more=ALL-UNNAMED
         --add-opens module_name/com.myco.project.others=ALL-UNNAMED
      </argline>
   </configuration>
   ...
</plugin>

根据 Jacoco 文档,您必须直接将 Jacoco 参数传递给 Surefire,因为使用覆盖 Jacoco 的默认值指定任何 Surefire 参数。Jacoco 的在线 Maven 文档指定了将 Jacoco 的参数传递给 Surefire (https://www.jacoco.org/jacoco/trunk/doc/prepare-agent-mojo.html)。<argLine>@{argLine}

可能性#2:混合插件

我也在我的部分中使用该插件。顺便说一句,在 Javadoc 报告阶段,它设法调用了 JaCoCo 的目标,并在不久之后给出了 OP 的错误消息(根据 maven 调试,特别是在配置报告以开始为 maven 生成时) - 尽管我的测试阶段已经运行并在构建输出目录中转储了一个正确的文件。忽略此警告可能是安全的,我的 JaCoCo 报告在我的 Maven 站点中呈现良好。但是,如果您在执行 JaCoCo 目标期间看到它,它可能不应该被忽视。maven-javadoc<reporting/>prepare-agentmaven-project-info-reports-pluginsitejacoco.exec

技巧

如果对文件的创建有疑问,请观察文件在生成过程中应该出现的目录。生成文件是一个相当缓慢的过程。在这里看到我的另一个答案:https://stackoverflow.com/a/75465187/2336934

尽最大努力保持所有默认值,越简单越好。

0赞 JustTry 5/9/2023 #25

另一个案例

-dtest=CommonUtilTest -DfailIfNoTests=false

使用这些标志也覆盖率报告不起作用 我试图只执行某些测试用例,但是 ,junits 有效但没有覆盖率报告。 必须在没有这些标志的情况下运行

0赞 Ivanuil 11/12/2023 #26

我遇到了同样的问题。jacoco失败的原因是项目绝对路径中的西里尔字母和空格。

您应该检查您的 maven 输出。应该有一行以 开头,后面有一条路径。检查此路径是否包含任何空格/非英文字母/特殊符号。argLine set to -javaagent: