Jacoco mavenプラグインが例外でコンソールを詰まらせる-java.lang.IllegalStateException:クラスはすでにインストルメント化されています

ディーパックS

Jacocoプラグインとpowermock mockitoの組み合わせを使用してJUnitテストケースを作成するソナーコードカバレッジに取り組んでいますが、mvn clean installを実行するとビルドはすべてうまくいきますが、コンソールには非常に長いスタックトレースチェーンが表示されます。プロジェクトで使用される多くのクラスがあり、非常に苛立たしいです。例外トレースは以下のようになります-

java.lang.instrument.IllegalClassFormatException: Error while instrumenting class..
Caused by: java.io.IOException: Error while instrumenting class.
Caused by: java.lang.IllegalStateException: Class <class-name> is already instrumented.

私は解決策のために以下のリンクを通り抜けましたが、抜け出すことができませんでした:-

https://github.com/jacoco/jacoco/issues/32

リンクには、「エラーは、同じプロセス用に構成された2つのJaCoCoエージェントがあることを示しています。surefire-report-pluginをアクティブ化するとエージェント2倍になるようです。これは例外的なケースではありませんが、テスト用のJVMの構成にエラーがあります。 「私の場合、argLineが1つのjacocoエージェントのみに設定しているので、エージェントが2倍になることすらありません。

私の場合、argLineは以下に設定されています-

javaagent:C:\\Users\\user\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.7.6.201602180812\\org.jacoco.agent-0.7.6.201602180812-runtime.jar=destfile=C:Users\\user\\git\\package\\target\\jacoco.exec

jacoco-sonar構成のpom.xmlエントリは次のとおりです-

<properties>
        <sonar.sources>src/main/java</sonar.sources>
        <sonar.tests>src/test/java</sonar.tests>
        <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
        <sonar.jacoco.reportPaths>${project.basedir}/target/jacoco.exec</sonar.jacoco.reportPaths>
        <sonar.language>java</sonar.language>
        <sonar.binaries>${project.basedir}/target/classes</sonar.binaries>
        <sonar.inclusions>
            **/com/abc/service/impl/ABCServiceImpl.java,
            **/com/abc/dao/impl/ABCDAOImpl.java
        </sonar.inclusions>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20</version>
                <configuration>
                    <skipTests>false</skipTests>
                    <argLine>-Xmx1024m -XX:MaxPermSize=256m ${argLine}</argLine>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.6.201602180812</version>
                <executions>
                 <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                </execution> 
                <execution>
                    <id>default-instrument</id>
                    <goals>
                        <goal>instrument</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-restore-instrumented-classes</id>
                    <goals>
                        <goal>restore-instrumented-classes</goal>
                    </goals>
                </execution>
                    <execution>
                        <id>default-report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

:「default-instrument」と「default-restore-instrumented-classes」の実行要素を削除すると、例外トレースは表示されませんが、ソナーダッシュボードでカバレッジ= 0.0%になります。これらの2つの実行要素を使用すると、正しい結果が得られます。コードカバレッジですが、コンソールに長いスタックトレースがあります。どんな助けでも大歓迎です。

Stuti verma

この調査に対する私の洞察によると、JaCoCoJavaエージェントでオフラインのインストルメント化されたクラスを使用することも可能です。この場合、構成はエージェントオプションから取得されます。エージェントは、事前に計測されたクラスが除外されるように構成する必要がありますたとえば、「excludes = *」を使用します。そうしないと、エージェントが同じようにそのようなクラスを再度インストルメントすると、コンソールにエラーメッセージが表示されます。

エージェントjacocoagent.jarはJaCoCoディストリビューションの一部であり、必要なすべての依存関係が含まれています。Javaエージェントは、次のJVMオプションを使用してアクティブ化できます。

-javaagent:[yourpath /] jacocoagent.jar = [option1] = [value1]、[option2] = [value2]

JaCoCoエージェントのオプションについては、次のリンクを検討してください:http://www.jacoco.org/jacoco/trunk/doc/agent.html

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ