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

回答:


134

jacoco-maven-plugin:0.7.10-SNAPSHOT

jacoco:エージェントの準備の言葉:

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]テスト中のアプリケーションに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 14

は機能しましたが、tychoを使用しているため、tycho.testArgLineを使用する必要がありました。
Raffi Khatchadourian、2015

1
引用されたリンクは、使用するために少し異なる提案を持っています@{argLine}
Slava Semushin 2017年

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
あなたはそれを釘付けにしたと思います。人々はそれを「迅速な修正」のためにググるかもしれませんが、最も正しい答えは「真実は、このエラーは多くの、多くの理由で返される」です。それが何であるかを知る必要があるだけです。私にとっては、maven-surefire-pluginの<argLine>を上書きする親pomでした。
tuan.dinh

この!ありがとう。私は同じメッセージを受け取りましたが、それは**/*Test.java私のテストクラスが名前が付けられたときに名前が付けられたファイルのみを確実に探していたためです*Tests.java
Roger Worrell

私には2つの問題がありました。1。テストクラスはまったくなく、少なくとも1つの*Test.javaクラスと@Test、Jacocoが何かを実行できるように注釈が付けられた1つのテストメソッドが必要です。2.私のプロジェクトのTravis環境変数では、タイプミスがあったため、SONART_TOKEN=*****名前を付ける必要がありましたSONAR_TOKEN=*****。トラヴィスのドキュメントを参照してくださいここでは、を検索or define SONAR_TOKEN in your Repository Settings。それを修正した後、ビルドは正常に実行されました。問題のgitbhubプロジェクトを表示できます
ホセ・キハダ

15

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


私の問題を解決しました。絶好のスポット!
user1974753

13

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


5

Ftdruryの発言:

プラグイン構成を次のように変更します。

<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はlikeという名前のテストクラスしか認識しないと思いますXxxTest。これは、のテストクラスであることを示していXxxます。したがって、テストクラスの名前をこの形式に変更するだけで機能します。


2

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

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

解決策-FAQで説明さargLineれているsurefireように、「後置置換」のmavenプロパティ@{...}を使用して構成に値を追加します(私の固定構成surefire

argLineの他のプラグインによって設定されたプロパティをどのように使用しますか?Mavenはプロパティの置き換えを行います

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

@ {...}を使用すると、プラグインの実行時にプロパティを後で置換できるため、他のプラグインによって変更されたプロパティが正しく取得されます。

最初の試行に失敗しました- 目標構成でjaCoCoArgLineプロパティを定義します -シナリオは2番目の要件に失敗しました。IntelliJIDEAは、静的メソッドのモッキングのためにプロジェクトで使用するjmockitのエージェントを理解できませんでしたprepare-agentjacoco


JMockitで使用するときに同じ問題に直面し、このソリューションで問題を解決することができました。つまり、確実なプラグインにargLineを追加する
Karthik Rao

1

次の機能を持つ1つのドメインクラスを持つ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

そして、まだ期待どおりに動作しません:-( mvn clean installを実行するときのコンテンツなので、ターゲットディレクトリにはaggregate.execしかありません...
Wolfgang 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でデータを探しています。幹部。


1
では、なぜプラグインが設定で指定したものを無視するのですか?
デイブ

destfile構成をprepare-agent実行の構成に移動してみてください。すべてのMavenプラグインが構成の継承を丁寧に処理するわけではありません。
tdrury

0

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

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

Maven構成では、jacocoはprepare-agentフェーズでコマンドライン引数を準備しますが、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.