[maven] JaCoCo 실행시 “실행 데이터 파일 누락으로 인해 JaCoCo 실행 건너 뛰기”받기

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. 따라서 테스트 클래스의 이름을이 형식으로 변경하기 만하면됩니다!