JaCoCo 실행시 "실행 데이터 파일 누락으로 인해 JaCoCo 실행 건너 뛰기"받기


123

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] 

내가 놓친 구성에 대한 아이디어가 있습니까?



pom에 통합 테스트가있는 것 같습니다. destFile또한를 제거하고 기본 target / jacoco.exec 파일에 기록하도록했습니다.
MarkHu

위치 에 답변을 게시했습니다 .
Shivkumar Kawtikwar 2010

답변:


135

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>

이제하지만, 프로그래머 jacoco 목표없이, 문제를, 빌드가 실패합니다.
Andreas

일했지만 tycho를 사용하고 있기 때문에 tycho.testArgLine을 사용해야했습니다.
Raffi Khatchadourian 2015

1
인용 된 링크는 이제 사용하는 약간 다른 제안이 있습니다 @{argLine}.
Slava Semushin

2
정확히 이것이 내 문제였습니다. mvn 명령에 사용자 지정 인수가 mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"있습니다. maven-surefire-plugin을 명시 적으로 선언하고 구성을 설정하지 않습니다. 나는 그냥 maven 명령 줄에 argLine 자리 표시자를 추가 mvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"합니다. 이제 jacoco.exec 파일이 생성되고 소나에서 커버리지 보고서가 생성됩니다.
RenatoIvancic

1
효과가있다 !!! 문제는 통합 테스트를위한 메모리를 늘리기 위해 maven-surefire-plugin에 추가 한 <argLine> 구성 때문이었습니다. <argLine> $ {argLine} 구성 --my--additional-arguments--here-- </ argLine > 문제 해결
Massimo Da Ros

23

동일한 오류를 반환하는 약간 다른 문제에 직면했습니다.

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>

대부분의 사용자가 다른 이유로 경험할 것이라고 생각하므로 앞서 언급 한 리소스를 살펴보십시오!


2
나는 당신이 그것을 못 박았다고 생각합니다. 사람들은 "빠른 수정"을 위해 Google을 검색 할 수 있지만 가장 정답은 "진실은이 오류가 여러 가지 이유로 반환된다는 것입니다."입니다. 그것이 무엇인지 알아 내면됩니다. 나에게는 maven-surefire-plugin의 <argLine>을 덮어 쓰는 부모 pom이었습니다.
tuan.dinh

이! 감사. 나는 동일한 메시지를 얻었으나, 나의 확실한 플러그인 단지라는 이름의 파일을 찾고 있었다 때문이었다 **/*Test.java내 테스트 클래스의 이름 때*Tests.java
로저 워렐을

나는 두 가지 문제가 있었다 : 1. 어떤 테스트 클래스도없고, 최소한 하나의 *Test.java클래스 가 필요하고 , @TestJacoco가 무언가를 할 수 있도록 주석이 달린 하나의 테스트 메소드 가 필요합니다. 2. 내 프로젝트의 Travis 환경 변수에서 오타 SONART_TOKEN=*****가 있었는데 이름이 SONAR_TOKEN=*****. 여기 에서 Travis 문서를 참조 하고 or define SONAR_TOKEN in your Repository Settings. 이 문제를 해결 한 후 빌드가 성공적으로 실행되었습니다. 문제의 내 gitbhub 프로젝트를 볼 수 있습니다 .
Jose Quijada

16

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는 정상적으로 작동하기 시작했습니다.


내 문제를 해결했습니다. 그레이트 스팟!
user1974753

13

프로젝트에서 테스트 누락으로 인해 "실행 데이터 파일 누락으로 인해 JaCoCo 실행 건너 뛰기"오류가 발생할 수도 있습니다. 예를 들어 새 프로젝트를 시작하고 * Test.java 파일이 전혀없는 경우입니다.


5

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이어야한다는 중요한 사실을 발견했습니다.


5

나는이 질문이 꽤 오래되었다는 것을 알고 있지만 나와 같은 누군가가 답을 찾고 여기에 오면 도움이 될 것입니다. 이것으로 위의 오류를 극복 할 수있었습니다.

1) maven-surefire-plugin 플러그인에서 아래 코드를 제거하십시오.

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

2) 아래 목표를 추가하십시오.

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

3

지금 바로 같은 문제를 겪었습니다.

라는 HelloWorld클래스가 있고라는 이름의 테스트 클래스를 만든 HelloWorldTests다음 출력을 얻었습니다.Skipping JaCoCo execution due to missing execution data file.

그런 다음 내 pom.xml 작동 하려고 시도했지만 시도가 실패했습니다.

마지막으로으로 이름 HelloWorldTests을 바꾸면 HelloWorldTest작동합니다!

그래서 기본적 으로 jacoco는 같은 이름의 테스트 클래스 만 인식 한다고 생각합니다. XxxTest이는 해당 클래스가에 대한 테스트 클래스임을 나타냅니다 Xxx. 따라서 테스트 클래스의 이름을이 형식으로 변경하기 만하면됩니다!


2

나는 모든 답변을 시도했지만 다음과 같은 조언 조합 만 효과가 있습니다. 왜? 매우 구체적인 요구 사항이있었습니다.

  1. JaCoCo는 빌드가 명령 줄에서 실행될 때 보고서를 생성합니다. mvn clean verify (Maven 3.6.0)
  2. Intellij IDEA (2019.01)도 내 테스트를 실행합니다.
  3. 그것은 모두 플러그인에 javaagent정의 된 다른 존재 하에서 작동합니다.surefire

솔루션 - 앞에 추가 argLine가치 surefire받는다는 특성 "후반 교체"와 구성 @{...}에 설명 된대로 surefire 자주 묻는 질문 ( 내 고정 구성 )

argLine에서 다른 플러그인에 의해 설정된 속성을 어떻게 사용합니까? Maven은

플러그인이 실행되기 전에 pom.xml의 $ {...} 값. 따라서 Surefire는 argLine 속성에서 자리 표시자를 볼 수 없습니다. 이러한 속성에 대한 대체 구문을 사용하는 버전 2.17부터

@ {...}는 플러그인이 실행될 때 속성을 늦게 교체 할 수 있도록하므로 다른 플러그인에 의해 수정 된 속성이 올바르게 선택됩니다.

첫 번째 시도 실패- 목표 구성 에서 jaCoCoArgLine 속성 정의 -시나리오가 두 번째 요구 사항에 실패했습니다. IntelliJ IDEA는 정적 메서드 모의 프로젝트에서 사용하는 jmockit에 대한 에이전트를 파악할 수 없습니다.prepare-agentjacoco


JMockit과 함께 사용할 때 동일한 문제에 직면했으며이 솔루션으로 문제를 해결할 수있었습니다. 즉, 확실한 플러그인에 argLine 추가
Karthik Rao

1

다음 기능을 가진 1 개의 Domain 클래스가 있는 Maven / Java 프로젝트 를 추가했습니다 .

  • 플러그인 Surefire 및 Failsafe를 사용한 단위 또는 통합 테스트 .
  • Findbugs.
  • Jacoco 를 통한 테스트 범위 .

Jacoco 결과는 어디에 있습니까? 'mvn clean'을 테스트하고 실행 한 후 'target / site / jacoco / index.html'에서 결과를 찾을 수 있습니다. 브라우저에서이 파일을 엽니 다.

즐겨!

나는 프로젝트를 가능한 한 단순하게 유지하려고 노력했습니다. 이 프로젝트는 이러한 게시물의 많은 제안을 예제 프로젝트에 통합합니다. 기여자 여러분, 감사합니다!


git 프로젝트를 시도했지만 보고서를 보는 방법이 명확하지 않습니다.
Nagaraj Vittal

Jacoco 결과는 어디에 있습니까? 'mvn clean'을 테스트하고 실행 한 후 'target / site / jacoco / index.html'에서 결과를 찾을 수 있습니다. 브라우저에서이 파일을 엽니 다.
tm1701

저장소를 다시 stackoverflow에 링크 할 수 있습니다. 데모에서 버그를 발견 한 후 다시 질문을 찾기가 어려웠습니다.
Wolfgang Fahl 19

그리고 아직도 예상대로 작동하지 않습니다 :-( 대상 디렉토리에 mvn clean install을 할 때 그것의 컨텐츠로서 만 aggregate.exec이 ...
볼프강 Fahl에게

1

나는 며칠 동안 고생했다. 이 스레드에서 제안한 모든 다른 구성을 시도했습니다. 그들 중 어느 것도 작동하지 않습니다. 마지막으로 중요한 구성 만 에이전트 준비 목표 라는 것을 알았 습니다. 그러나 올바른 단계에 배치해야합니다. 나는 단위 테스트 후에 만 ​​실행될 것이기 때문에 오해의 소지 가있는 " 사전 통합 테스트 "에 너무 많은 예제를 넣는 것을 보았다 . 따라서 단위 테스트는 계측되지 않습니다.

올바른 구성은 기본 단계 만 사용해야합니다 (단계를 명시 적으로 지정하지 마십시오). 그리고 일반적으로 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>

0

실행은 jacoco 데이터를 /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec에 넣고 있지만 maven 구성은 $ {basedir} / target / coverage-reports / jacoco-unit에서 데이터를 찾고 있다고 말합니다. exec.


1
맞습니다. 플러그인이 구성에서 지정한 내용을 무시하는 이유는 무엇입니까?
Dave

destfile 구성을 에이전트 준비 실행 구성으로 이동해보십시오. 모든 Maven 플러그인이 구성 상속을 정중하게 처리하는 것은 아닙니다.
tdrury

0

내 응답은 매우 늦었지만 다른 사용자를위한 것입니다. 귀하의 경우 itCoverageAgent 변수에 저장된 명령 줄 에이전트 구성을 사용하려면 비상 안전 플러그를 구성해야합니다. 예를 들어

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

maven 구성에서 jacoco는 준비 에이전트 단계에서 명령 줄 인수를 준비하지만 failsafe 플러그인은이를 사용하지 않으므로 실행 데이터 파일이 없습니다.


0

다음을 사용하십시오.

mvn jacoco:report -debug

신고 절차에 대한 세부 정보를 확인하세요.

내 jacoco를 다음과 같이 구성했습니다.

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

그리고 mvn jacoco:report -debug그것은 수단이 기본 구성, 사용하여 표시 jacoco.exec하지 않을을 ~/jacoco.exec. 오류는 말한다missing 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

때로는 실행이 처음으로 실행되고 maven 새로 설치하면 그 후에 생성되지 않습니다. 문제는 기본 pom 파일의 maven-compiler-plugin 아래에서 skipMain 및 skip 속성에 대해 true를 사용하는 것입니다. 문제 나 제안의 일부로 소개 된 경우 제거하십시오.


0

제 경우에는 준비 에이전트의 destFile구성이 다르지만 그에 따라 보고서를로 구성해야 dataFile했지만이 구성이 누락되었습니다. dataFile가 추가 되면 제대로 작동하기 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.