2015-10-23 17 views
7

私のモジュールの1つでJaCoCo経由でAHPレポートを生成することに問題があります。ビルドが開始すると、私はJaCoCoが正しくargLineの設定を参照してください。JaCoCoはJaCoCoの実行をスキップして終了するまでjacoco.execを生成しません

[INFO] jacoco.agent.argLine set to -javaagent:<...>/.m2/repository/org/jacoco/org.jacoco.agent/0.7.2.201409121644/org.jacoco.agent-0.7.2.201409121644-runtime.jar=destfile=<...>/target/jacoco.exec 

しかし、.execはMavenのはJaCoCoを実行しようとする時点でまだ作成されていない。

[INFO] Skipping JaCoCo execution due to missing execution data file:<...>/target/jacoco.exec 

jacocoを。 MavenがJaCoCoの実行をスキップした後、最終的にexecが作成されます。したがって、クリーニングせずにビルドを再実行すると、AHPレポートを生成できます。

私は、JaCoCoでMaven Surefireを使用する際には注意が必要です。しかし、SurefireのプラグインやプラグインでargLineを明示的に使用しているわけではありません。 JaCoCoのように、他のプラグインの1つが自動的にargLineパラメータをハイジャックしているかどうか疑問に思っています。ここで

が使用されているすべてのプラグインのリストである:

  • jacoco-のmaven-pluginの
  • VERTX-のmaven-pluginの
  • のmaven-リソース・プラグイン
  • のmaven-依存関係のプラグイン
  • maven-surefire-plugin
  • maven-failsafe-plugin
  • maven-surefire-report
  • のmaven-組立・プラグイン

-plugin私は、ビルド出力に1不審なメッセージが表示されています:

[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ <module> --- 
[INFO] Changes detected - recompiling the module! 

私はそれが関連するかどうか分からないが、それはスキップする前に二度表示されますJaCoCoが正常に動作するモジュールには表示されません。

アイデア?

*編集 - ここjacocoの設定

<plugins> 
     <...> 
     <plugin> 
      <groupId>org.jacoco</groupId> 
      <artifactId>jacoco-maven-plugin</artifactId> 
      <version>${jacoco.version}</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>prepare-agent</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>report</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>report</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    <pluginManagement> 
     <plugins> 
      <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>org.jacoco</groupId> 
            <artifactId> 
             jacoco-maven-plugin 
            </artifactId> 
            <versionRange> 
             [0.7.2.201409121644,) 
            </versionRange> 
            <goals> 
             <goal>prepare-agent</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <ignore></ignore> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 

だ私は、プラグイン管理部が行っている正確に何わからないんだけど、それをコメントアウトすることは何も解決しません。私はまた、JaCoCoプラグインの設定をsurefire/failsafeの設定の上に置いてみましたが、同じ目標を共有しているプラ​​グインの場合には問題ありませんでしたが、どちらも役に立ちませんでした。

*編集2 - 問題が確実に含まれているように見えます。それらをコメントアウトすると、JaCoCoの.exec生成が修正され、JaCoCoは正常に動作します。

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>${maven.surefire.plugin.version}</version> 
      <configuration> 
       <!-- <includes> 
        <include>**/unit/**/*Test*.java</include> 
       </includes> --> 
      </configuration> 
     </plugin> 

誰でも知っていますか?

+0

私は –

+0

@question_maven_comを追加しました –

答えて

2

私は次の3つの手順を使用します。この問題を解決するには、次の

  1. jacoco.execファイルを作成しているプラ​​グインの実行を決定します。これを行うには、デバッグログを有効にしてMavenを実行し(mvn -X)、出力にjacoco.agent.argLineプロパティ名またはその値を探します。関連する設定が親POMからのものである場合、有効なPOM(mvn help:effective-pom)を見ることもできます。私の推測では、それはmaven-failsafe-pluginの実行であることに注意してください。

  2. プラグインが実行されるフェーズを決定します。 maven-failsafe-pluginの場合、これはおそらくintegration-testになります。

  3. のゴールがbuild lifecycleで後で実行されるように、JaCoCoプラグインの設定を変更します。例えば。 jacoco.execファイルがintegration-testフェーズで作成されている場合はpost-integration-testフェーズでreportゴールを実行できます。

+0

おかげで、これらのコマンドライン引数を理解して私には本当に便利だったuは、ライフサイクルに問題があると思います、ショーポンポンjacoco - プラグインの設定舞台裏で何ができるの?本当に何も私には目立たなかったので、私は次のことを発見するまでプラグインをコメントアウトし始めました。 *編集 - 質問2の編集2に発見を入れてください。 –

0

すでに与えられた答えにジャストほか。 あなたのmaven-surefire-plugin設定では、すでにargLine設定を使って、使用されているメモリのようなものを上書きすることができます。そうすると、jacoco-maven-pluginで設定されたarglineは、jacocoレポートの生成に失敗します。 この場合、プロパティ名をjacoco-maven-plugin configに割り当て、それをあなたのmaven-surefire-pluginのargLineパラメータで参照します。

 <plugin> 
      <groupId>org.jacoco</groupId> 
      <artifactId>jacoco-maven-plugin</artifactId> 
      <version>0.7.9</version> 
      <executions> 
       <!-- prepare agent for measuring unit tests --> 
       <execution> 
        <id>prepare-unit-tests</id> 
        <goals> 
         <goal>prepare-agent</goal> 
        </goals> 
        <configuration> 
         <append>true</append> 
         <destFile>${sonar.jacoco.reportPath}</destFile> 
         <!-- Sets the VM argument line used when unit tests are run. --> 
         <propertyName>surefireArgLine</propertyName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

[...]

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19.1</version> 
      <configuration> 
       <printSummary>false</printSummary> 
       <redirectTestOutputToFile>true</redirectTestOutputToFile> 
       <forkCount>3</forkCount> 
       <reuseForks>true</reuseForks> 
       <argLine>${surefireArgLine} -Xmx1024m -noverify</argLine>     
      </configuration> 
     </plugin> 
関連する問題