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]
내가 놓친 구성에 대한 아이디어가 있습니까?
답변
jacoco-maven-plugin : 0.7.10-SNAPSHOT
에서 jacoco : 에이전트 준비 말한다 :
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-plugin : 0.7.2-SNAPSHOT
다음과 같은 jacoco : prepare-agent 를 따릅니다 .
[org.jacoco : jacoco-maven-plugin : 0.7.2-SNAPSHOT : prepare-agent] 테스트중인 애플리케이션에 VM 인수로 전달할 수있는 JaCoCo 런타임 에이전트를 가리키는 속성을 준비합니다. 기본적으로 프로젝트 패키징 유형에 따라 다음 이름을 가진 속성이 설정됩니다.
- eclipse-test-plugin 패키징 유형에 대한 tycho.testArgLine 및
- 그렇지 않으면 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>
답변
동일한 오류를 반환하는 약간 다른 문제에 직면했습니다.
Skipping JaCoCo execution due to missing execution data /target/jacoco.exec
사실이 오류는 여러 가지 이유로 반환됩니다. Stack Overflow에서 다양한 솔루션을 실험했지만이 리소스를 찾았습니다. 가 가장 좋습니다. Jacoco가 동일한 오류를 반환 할 수있는 여러 가지 잠재적 인 이유를 분석합니다.
우리에게 해결책은 구성에 준비 에이전트를 추가하는 것이 었습니다.
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
대부분의 사용자가 다른 이유로 경험할 것이라고 생각하므로 앞서 언급 한 리소스를 살펴보십시오!
답변
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는 정상적으로 작동하기 시작했습니다.
답변
프로젝트에서 테스트 누락으로 인해 “실행 데이터 파일 누락으로 인해 JaCoCo 실행 건너 뛰기”오류가 발생할 수도 있습니다. 예를 들어 새 프로젝트를 시작하고 * Test.java 파일이 전혀없는 경우입니다.
답변
F 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이어야한다는 중요한 사실을 발견했습니다.
답변
나는이 질문이 꽤 오래되었다는 것을 알고 있지만 나와 같은 누군가가 답을 찾고 여기에 오면 도움이 될 것입니다. 이것으로 위의 오류를 극복 할 수있었습니다.
1) maven-surefire-plugin 플러그인에서 아래 코드를 제거하십시오.
<reuseForks>true</reuseForks>
<argLine>-Xmx2048m</argLine>
2) 아래 목표를 추가하십시오.
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
답변
지금 바로 같은 문제를 겪었습니다.
라는 HelloWorld
클래스가 있고라는 이름의 테스트 클래스를 만든 HelloWorldTests
다음 출력을 얻었습니다.Skipping JaCoCo execution due to missing execution data file.
그런 다음 내 pom.xml
작동 하려고 시도했지만 시도가 실패했습니다.
마지막으로으로 이름 HelloWorldTests
을 바꾸면 HelloWorldTest
작동합니다!
그래서 기본적 으로 jacoco는 같은 이름의 테스트 클래스 만 인식 한다고 생각합니다. XxxTest
이는 해당 클래스가에 대한 테스트 클래스임을 나타냅니다 Xxx
. 따라서 테스트 클래스의 이름을이 형식으로 변경하기 만하면됩니다!