2016-03-30 22 views
10

親(HelloWorld)と異なる子供(HelloWorldServicesとHelloWorldPresentation)で構成されたMavenマルチモジュールプロジェクトがあり、Jenkinsを使用してビルドします。成功したテストを実行した後Mavenを使用したJaCoCo - 実行データファイルがありません

エラーが

[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 

を言う前に、これは私が親ポンポン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ファイルは決して作成されていません。私はjacoco目標を省略したときに、それもINFOメッセージが表示されませんので、目標として、私は

mvn clean install jacoco:prepare-agent jacoco:report 

を使用しています。インストールフェーズの後しかし、その代わりに呼び出す前に、エージェントを呼び出すべきではありません

+1

代わりに、 'mvn clean jacoco:prepare-agent install'を試してみてください。(2つのフェーズ間のエージェント) –

答えて

18

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値、report目標のdataFile値に適用されたものと同じよう${project.build.directory}/jacoco.execを使用しています。この変更の主な理由は、プロジェクト名としてartifactId(デフォルトであるが、それでも必須ではない)に頼るのではなく、より汎用的な${project.build.directory}プロパティを使用して直接targetを指すのではなく、より柔軟で標準的なビルドになります。


最後の注意:build/plugins部分とないbuild/pluginManagement/pluginsセクション内Jacocoプラグインの実行を設定してください。 pluginManagementセクションは、ガバナンスとバージョンまたは構成の共通の調和を目的としていますが、対応するプラグインがbuild/pluginsの下に宣言されない場合はが無視されます。となります。pluginManagementofficial Maven POM reference

1として
は:サイドプラグインに沿って見られる要素です。プラグイン管理には、この特定のプロジェクトビルドのプラグイン情報を設定するのではなく、これを継承したプロジェクトビルドを設定することを除いて、プラグイン要素とほぼ同じ方法が含まれています。 しかし、これは子供のプラグイン要素内で実際に参照されるプラグインのみを設定します。子どもたちはpluginManagementの定義を上書きする権利があります。

(注:太字は私です)

+0

' mvn install'を呼び出すときにこの作業をするには何が必要ですか?私が明示的にジャココの目標を呼び出さなければ、彼らは実行されません。 – dasLort

+0

@dasLortどのMavenのバージョンを使用していますか?サンプルマルチモジュールプロジェクトで問題を再現できませんでした。スキップ警告が表示されず、ジャココレポートが正しく取得されました –

+0

Maven 3.3.9および(Jenkins)Maven Integration Plugin 2.12.1。つまり、あなたは 'mvn install'を実行でき、それは上記の設定呼び出しでjacocoを呼び出すでしょう? – dasLort

2

私は「destfile」と「データファイルが」大文字と小文字が区別されますので、多分それがうまくいく、「destFile」と「DATAFILE」に置き換えるしようと思います。 )

関連する問題