执行JaCoCo时是否因执行数据文件丢失而跳过JaCoCo?

我正在使用Maven 3.0.3,JUnit 4.8.1和Jacoco 0.6.3.201306030806,并试图创buildtesting覆盖率报告。

我只有一个unit testing的项目,但我不能得到报告运行,反复得到错误Skipping JaCoCo execution due to missing execution data file当我运行时:

 mvn clean install -P test-coverage 

这是我的POM如何configuration:

 <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> 

我所有的testing运行成功。 这里是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, ie 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, ie 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] 

任何想法什么configuration我失踪?

jacoco – Maven的插件:0.7.10-快照

从雅可克:准备代理说:

在maven-surefire-plugin的情况下做到这一点的方法之一是使用晚期属性评估的语法:

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

请注意添加到-your -extra -arguments@{argLine}

感谢Slava Semushin注意到在评论中的变化和报告 。

jacoco – Maven的插件:0.7.2-SNAPSHOT

按照jacoco:准备代理说:

[org.jacoco:jacoco-maven-plugin:0.7.2-SNAPSHOT:prepare-agent]准备一个指向JaCoCo运行时代理的属性,该属性可以作为VMparameter passing给被testing的应用程序。 根据默认的项目包装types,设置具有以下名称的属性:

  • tycho.testArgLine用于打包typeseclipse-test-plugin和
  • 否则,argLine。

请注意,这些属性不能被testingconfiguration覆盖,否则不能连接JaCoCo代理。 如果您需要自定义参数,请将其追加。 例如:

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

生成的覆盖信息在执行过程中收集,默认情况下在过程终止时写入文件。

你应该改变maven-surefire-plugin插件configuration中的以下行(注意<argLine>${argLine} ):

 <argLine>-Xmx2048m</argLine> 

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

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

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

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

在某些情况下,其他一些argline安装或者pom插件可能会覆盖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开始正常工作。

我面对一个不同的问题,返回相同的错误。

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

事实是,这个错误是由许多原因返回的。 我们在Stack Overflow上尝试了不同的解决scheme,但发现这个资源是最好的。 它撕下了为什么雅科可能会返回相同的错误的许多不同的潜在原因。

对于我们来说,解决scheme是将一个准备代理添加到configuration中。

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

我想大多数用户会遇到不同的原因,所以看看上述资源!

FWTrury说:

改变你的插件configuration为:

 <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。

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

1)从插件maven-surefire-plugin中删除下面的一段代码

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

2)添加以下目标:

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

由于缺less项目中的testing,也可能因为缺less执行数据文件而导致“跳过JaCoCo执行”错误。 例如,当你启动新的项目,并没有* Test.java文件。

执行表示将jacoco数据放在/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec中,但是您的mavenconfiguration正在寻找$ {basedir} / target / coverage-reports / jacoco-unit中的数据。 EXEC。