132

Maven マルチモジュール プロジェクトがあり、コード カバレッジ レポートに jacoco-maven を使用しています。一部のクラスは、Spring 構成であり、私はそれらに興味がないため、報告されるべきではありません。

次のように maven-jacoco プラグインを宣言しました。

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.2.201409121644</version>
<configuration>
    <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
    <exclude>some.package.*</exclude>
    <exclude>**/*Config.*</exclude>
    <exclude>**/*Dev.*</exclude>
    <exclude>some/package/SomeClass.java</exclude>
</configuration>
<executions>
    <execution>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
    </execution>
    <execution>
        <id>report</id>
        <phase>prepare-package</phase>
        <goals>
            <goal>report</goal>
        </goals>
    </execution>
    <execution>
        <id>post-unit-test</id>
        <phase>test</phase>
        <goals>
            <goal>report</goal>
        </goals>
    </execution>
</executions>
</plugin>

問題は、mvn clean verifyjacoco を実行しても、xml 構成が指摘するように除外されるべきクラスが報告されることです。どうすれば適切に構成できますか?

4

9 に答える 9

220

XML が少し間違っています。excludes 親フィールド内にクラスの除外を追加する必要があるため、上記の構成はJacoco docsに従って次のようになります。

<configuration>
    <excludes>
        <exclude>**/*Config.*</exclude>
        <exclude>**/*Dev.*</exclude>
    </excludes>
</configuration>

除外フィールドの値は、標準のワイルドカード構文を使用して、ディレクトリ target/classes/ に相対的なコンパイル済みクラスのクラス パス (パッケージ名ではない) にする必要があります。

*   Match zero or more characters
**  Match zero or more directories
?   Match a single character

次の方法で、パッケージとそのすべての子/サブパッケージを除外することもできます。

<exclude>some/package/**/*</exclude>

これにより、 のすべてのクラスとすべての子が除外さsome.packageれます。たとえばsome.package.child、レポートにも含まれません。

上記を使用してテストしたところ、レポートの目標はクラスの数を減らしてレポートしました。

その後、このレポートを Sonar にプッシュする場合は、Sonar 設定で実行できる表示でこれらのクラスを除外するように Sonar に指示する必要があります。

設定 > 一般設定 > 除外 > コード カバレッジ

Sonar Docsでもう少し説明しています

上記のコマンドを実行する

mvn clean verify

クラスが除外されたことを示します

除外なし

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
[INFO] Analyzed bundle '**' with 37 classes

除外あり

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
[INFO] Analyzed bundle '**' with 34 classes

お役に立てれば

于 2015-03-06T10:33:50.310 に答える
1

この作業は、Spring Boot 2.5.3 と Jacoco 0.8.4 の魅力のようです ^_^

           <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.4</version>
                <configuration>
                    <destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
                    <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
                    <output>file</output>
                    <append>true</append>
                    <excludes>
                        <exclude>**/*com/example/Application.class</exclude>
                        <exclude>**/*com/example/modal*/**</exclude>
                        <exclude>**/*com/example/dto*/**</exclude>
                        <exclude>**/*com/example/mapper*/**</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
于 2021-09-07T20:31:00.483 に答える