親(HelloWorld)と異なる子(HelloWorldServicesおよびHelloWorldPresentation)で構成されるMavenマルチモジュールプロジェクトがあり、Jenkinsを使用してビルドします。
成功したテストを実行した後のエラーは
[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:report (default-cli) @ HelloWorldServices ---
[INFO] Skipping JaCoCo execution due to missing execution data file:/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec
それが言う前の行
[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:prepare-agent (default-cli) @ HelloWorldServices ---
[INFO] argLine set to -javaagent:/var/lib/jenkins/.m2/repository/org/jacoco/org.jacoco.agent/0.7.6.201602180812/org.jacoco.agent-0.7.6.201602180812-runtime.jar=destfile=/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec
これは私が親pom JaCoCoプラグインを定義した方法です:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<configuration>
<destfile>${project.artifactId}/target/jacoco.exec</destfile>
<datafile>${project.artifactId}/target/jacoco.exec</datafile>
</configuration>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
ポンポンで確実に言及したことはありませんでした。また、どこにでもあるものを見つけてargLineを構成に入れましたが、すべて同じ結果になりました。 JaCoCo .execファイルは、私が何をしようとも、一度も作成されたことはありません。目標に関しては、私は
mvn clean install jacoco:prepare-agent jacoco:report
Jacocoゴールを省略すると、INFOメッセージも表示されないためです。
インストールフェーズの後ではなく、前にエージェントを呼び出す必要があります。そのため、呼び出す代わりに:
mvn clean install jacoco:prepare-agent jacoco:report
呼び出す必要があります
mvn clean jacoco:prepare-agent install jacoco:report
主な理由は、エージェントがビルドライフサイクルに参加せず、test
フェーズがinstall
フェーズの一部として既に実行されている場合、Mavenがコマンドライン呼び出しに従ってエージェントを実行することです。 、しかし手遅れになります。
おそらく、上記のプラグイン構成も次のように変更する必要があります。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
注:構成セクションは実際にはデフォルト値を指していたため、削除しました。さらに、ここではXML要素は大文字と小文字が区別されるため、datafile
要素は単に無視され、代わりにdataFile
である必要がありました。 destFile
にも同じことが当てはまります。
prepare-agent
目標は、既にデフォルトのdestFile
値として${project.build.directory}/jacoco.exec
を使用しています。これは のdataFile
値にも適用されますreport
目標。この変更の主な理由は、プロジェクト名としてartifactId
に依存せず(デフォルトですが、必須ではない)、より汎用的な${project.build.directory}
プロパティを使用して、より柔軟で標準的なビルドになりますtarget
で直接。
最後の注意:build/plugins
セクションではなく、build/pluginManagement/plugins
セクション内でJacocoプラグインの実行を設定してください。 pluginManagement
セクションは、バージョンまたは構成のガバナンスおよび一般的な調和を目的としていますが、対応するプラグインがそうでない場合はignoredになりますbuild/plugins
で宣言されています。
公式Maven POMリファレンス
pluginManagement:プラグインの横に表示される要素です。プラグイン管理には、この特定のプロジェクトビルドのプラグイン情報を構成するのではなく、このプロジェクトビルドを継承するプロジェクトビルドを構成することを除いて、ほぼ同じ方法でプラグイン要素が含まれます。 ただし、これは、子のplugins要素内で実際に参照されるプラグインのみを構成します。子には
pluginManagement
定義をオーバーライドするすべての権利があります。
(注:太字は私のものです)
「destfile」と「datafile」は大文字と小文字が区別されると思うので、「destFile」と「dataFile」に置き換えてみてください。
実行データファイルが作成されない理由は次のとおりです。
-テストはありません。
-すべてのテストは無視されます。
-Surefireプラグインがありません。
-JaCoCoのprepare-agentゴールは実行されません。
-SurefireプラグインはJaCoCoのエージェントで構成されていません。