2

Sonar の最新バージョン 2.12 には Jacoco プラグインが統合されており、マルチモジュール プロジェクトのコード カバレッジ部分に使用したいと考えています。

私はこのような構造を持っています

proj.com.parent
   proj.com.provider
   proj,com.test

プロバイダー プロジェクトのテスト ケースはテスト プロジェクトにあります。ソナーでコード カバレッジ プラグインを jacoco として設定すると、正常に実行されますが、結合されたコード カバーはダッシュボードに表示されません。1 つの jacoco.exec ファイルで問題を解決できるという投稿を見たことがありますが、解決できません。

以下のようにpomで以下を設定しようとしました

<profile>
        <id>sonar</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                          <argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath}</argLine> 
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <properties>
            <sonar.jacoco.reportPath>${basedir}/code-coverage/jacoco.exec</sonar.jacoco.reportPath>
            <sonar.jacoco.jar> C:\sonar-2.12\war\sonar-server\deploy\plugins\jacoco\META-INF\lib\org.jacoco.agent-0.5.3.201107060350.jar</sonar.jacoco.jar>
        </properties>

しかし、maven コマンドライン「 mvn clean install 」では、次のエラーが発生します。

C:\sonar-2.12\war\sonar-server\deploy\plugins\jacoco\META-INF\lib\org.jacoco.agent-0.5.3.201107060350.jar で Premain-Class マニフェスト属性が見つかりませんでした の初期化中にエラーが発生しましたVM エージェント ライブラリの初期化に失敗しました: インストゥルメント

誰でもこれについて何か助けを提供できますか?

4

3 に答える 3

10

あなたが指しているjarファイルはjarファイルではありません。winrarを使用して抽出すると、その中に別のjarファイルが表示されます。jacocoagent.jarと呼ばれます。正しいjarを取得したかどうかを確認するには、jacocoagent.jarを抽出し、manifest.mfを探します。これには、premainクラスのエントリが含まれている必要があります。

それでいいのです。

于 2012-03-20T13:38:35.840 に答える
3

私も同じ問題を抱えていました。中央リポジトリで Jacoco エージェントのアーティファクトを見てみましょう。

通常の jar アーティファクトと、classifier ランタイムを含む jar があります。エージェント jar として使用するには、「ランタイム」アーティファクトが必要です。私がすることは、次のように maven 依存関係プラグインを含む Jacoco エージェント ランタイム jar をダウンロードするだけです。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>download-jacoco-agent</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>org.jacoco</groupId>
                        <artifactId>org.jacoco.agent</artifactId>
                        <version>0.6.3.201306030806</version>
                        <classifier>runtime</classifier>
                        <outputDirectory>${project.build.directory}</outputDirectory>
                        <destFileName>jacoco-agent.jar</destFileName>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

次に、次のコマンド ライン オプションを定義するだけです。

<argLine>-javaagent:${project.build.directory}/jacoco-agent.jar=destfile=${sonar.jacoco.reportPath}</argLine> 
于 2013-07-30T13:37:21.437 に答える
1

おそらく、プロパティsonar.core.codeCoveragePluginを値jacocoに設定してみてください。Sonar のデフォルトのコード カバレッジ ツールは引き続き cobertura です。コード カバレッジについては、次の doco を参照してください。

それでも解決しない場合は、次のリンクを見つけました (Maven から Jacoco を実行しようとしています)。

于 2012-01-21T11:21:59.780 に答える