web-dev-qa-db-ja.com

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] 

どのような構成が不足していますか?

82
Dave

jacoco-maven-plugin:0.7.10-SNAPSHOT

jacoco:prepare-agent から:

Maven-surefire-pluginの場合にこれを行う方法の1つは、プロパティの評価を遅らせるために構文を使用することです。

<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]できるJaCoCoランタイムエージェントを指すプロパティを準備します。テスト対象のアプリケーションにVM引数として渡されます。デフォルトでは、プロジェクトのパッケージタイプに応じて、次の名前のプロパティが設定されます。

  • タイプ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>
103
Jacek Laskowski

同じエラーを返す少し異なる問題に直面しました。

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

真実は、このエラーは多くの理由で返されます。 Stack Overflowでさまざまなソリューションを試しましたが、これは resource が最適であることがわかりました。 Jacocoが同じエラーを返す可能性のある多くの異なる潜在的な理由を分解します。

私たちにとっての解決策は、構成に準備エージェントを追加することでした。

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

ほとんどのユーザーはさまざまな理由でそれを経験していると思いますので、前述のリソースをご覧ください!

17
Chad Van De Hey

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に設定

例の1つ

           <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は正常に動作し始めました。

10
Atish Narlawar

また、プロジェクトのテストが欠落しているため、「実行データファイルの欠落によるJaCoCoの実行のスキップ」エラーが発生する可能性があります。たとえば、新しいプロジェクトを起動し、* Test.Javaファイルがまったくない場合。

8
Tanya Jivvca

私はこの質問がかなり古いことを知っていますが、私のような誰かが答えを探してここに来たら、これが役立つかもしれません。これで上記のエラーを克服することができました。

1)プラグインmaven-surefire-pluginから以下のコードを削除します

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

2)以下の目標を追加します。

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

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>

編集:ちょうど1つの重要なことに気づきました、destFileとdataFileは大文字と小文字を区別するようですので、destfileではなくdestFileであることになっています。

4
BoneGoat

Maven/Javaプロジェクト を追加し、次の機能を備えた1つのドメインクラスを追加しました。

  • プラグインSurefireおよびFailsafeを使用した単体または統合テスト
  • Findbugs。
  • Jacocoによるカバレッジのテスト。

Jacocoの結果はどこにありますか? 「mvn clean」をテストして実行した後、「target/site/jacoco/index.html」で結果を見つけることができます。このファイルをブラウザで開きます。

楽しい!

プロジェクトをできるだけシンプルにしようとしました。プロジェクトは、これらの投稿からの多くの提案をプロジェクト例にまとめます。 ありがとう、貢献者!

1
tjm1706

使用してみてください:

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
xiaoLiuLiu

私はすべての答えを試しましたが、次のアドバイスの組み合わせだけがうまくいきました。どうして?非常に具体的な要件がありました。

  1. JaCoCoは、コマンドラインからビルドを実行するとレポートを生成します:mvn clean verify(Maven 3.6.0)
  2. Intellij IDEA(2019.01)はテストも実行します
  3. それはすべてjavaagentプラグインで定義された別のsurefireの存在下で動作します

Solution-argLine構成にsurefire値を追加し、surefire_ faq _で説明されているように、「遅延置換」mavenプロパティ@{...}を追加しますmy fixed configuration

ArgLineの他のプラグインによって設定されたプロパティを使用するにはどうすればよいですか? Mavenは、

プラグインが実行される前のpom.xmlの$ {...}値。そのため、SurefireはargLineプロパティにプレースホルダーを表示しません。バージョン2.17では、これらのプロパティに代替構文を使用しているため、

@ {...}は、プラグインの実行時にプロパティの遅延置換を許可するため、他のプラグインによって変更されたプロパティが正しく取得されます。

最初の試行に失敗しました- define jaCoCoArgLinejacocoprepare-agentゴール設定のプロパティ-シナリオは2番目の要件IntelliJ IDEAに失敗しました静的メソッドのモックのプロジェクトで使用しているjmockitのエージェントを見つけられない

0
Pawel

実行では、jacocoデータを/Users/davea/Dropbox/workspace/myproject/target/jacoco.execに配置しますが、Maven構成は$ {basedir}/target/coverage-reports/jacoco-unitのデータを探しています。 exec。

0
tdrury

実行が最初に実行されることもありますが、Mavenのクリーンインストールを実行しても、その後生成されません。この問題は、skipMainにtrueを使用し、メインpomファイルのmaven-compiler-pluginの下のプロパティをスキップしていました。問題や提案の一部として導入された場合は削除してください。

0
Srini M

私の応答は非常に遅いですが、他のユーザーの場合あなたの場合、itCoverageAgent変数に保存されたコマンドラインエージェント構成を使用するためにフェイルセーフプラグを構成する必要があります。例えば

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

Maven構成では、jacocoはprepare-agentフェーズでコマンドライン引数を準備しますが、フェイルセーフプラグインはそれを使用しないため、実行データファイルはありません。

0
jpl

私は何日も苦労しました。このスレッドで提案されているさまざまな構成をすべて試しました。それらのどれも動作しません。最後に、重要な設定のみがprepare-agentゴールであることがわかりました。しかし、あなたはそれを正しい段階に置く必要があります。 「pre-integration-test」に多くの例があるのを見ましたが、それはユニットテストの後でしか実行されないため、誤解を招きます。したがって、単体テストはインスツルメントされません。

正しい構成では、デフォルトのフェーズを使用するだけです(フェーズを明示的に指定しないでください)。そして、通常、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
Jianwu Chen