2

Java 7 で cobertura を使用すると問題が発生したため、 Jacoco を試しています。私のプロジェクトには、親プロジェクトpom.xmlとサブ プロジェクトがあります。あるプロジェクトでは、Spring を使用していくつかの統合テストを実行しています。そのため、このプロジェクトの にこのプラグインがありますpom.xml

<plugin>
    <version>2.12.4</version>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <!-- -XX:-UseSplitVerifier is for java 7 -->
        <argLine>
            -XX:-UseSplitVerifier 
            -javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar
        </argLine>
    </configuration>
</plugin>

私はJava 7を使用しているので、このプラグインを親に設定しましたpom.xml:

<plugin>
    <version>2.5.1</version>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>1.7</source>
    <target>1.7</target>
    <optimize>true</optimize>
    <debug>true</debug>
    <showDeprecation>true</showDeprecation>
    <showWarnings>true</showWarnings>
    <encoding>utf8</encoding>
    </configuration>
</plugin>

今、私がmvn clean installすべてのプロジェクトを使用しているとき、/targetフォルダにこのファイルがあります: jacoco.exec ; しかし、を使用するこのプロジェクトには、spring-instrumentこのファイルがありません。問題は、Jacocoasmがofを使用したいのにspring-instrument失敗することだと思います (ただし、私が正しいかどうかはわかりません)。

ジャココ版は0.6.3.201306030806

この場合、Jacocoが計測に失敗するのはなぜですか? どうすればこれを克服できますか?

コードを 1.6 にコンパイルするようにmaven-compiler-pluginを構成できれば、 maven-surefire-pluginプラグインは必要なくなるのではないかと考えました。それは理にかなっていますか?

4

2 に答える 2

3

Jacoco Maven プラグインによって定義された argLine 値は、Surefire プラグインによって書き換えられています。

次のように、「jacoco-maven-plugin」構成でプロパティ名を設定します。

<propertyName>coverageAgent</propertyName>

次に、確実なプラグイン構成で argLine を編集して、Jacoco のエージェントが含まれるようにします。

<argLine>
    -XX:-UseSplitVerifier
    ${coverageAgent} 
    -javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar
</argLine>

Jacoco のエージェントが Spring の Instrument の前に配置されていることに注意してください。Jacoco は、変更されたバイトコード (たとえば、AspectJ LTW によって生成されたもの) の処理に問題があるため、これが行われるべき方法です。

実際、最初のエージェントであっても、Jacoco の報告は依然として間違っている可能性がありますが、問題は通常、いくつかの状況に限られています (例: http://sourceforge.net/p/eclemma/discussion/614869/thread/3d875388 ) 。 .

于 2013-07-21T15:49:16.033 に答える
2

おそらくjavaagentとして実装されているため、JaCoCoもjavaコマンドラインを使用していると思います。

spring-instrument javaagent が JaCoCo のものをオーバーライドしている可能性がありますか?

于 2013-06-19T10:22:27.107 に答える