Configuration de Maven Jacoco-exclure les classes / paquets du rapport ne fonctionne pas

j'ai un projet maven multi-modules et j'utilise jacoco-maven pour les rapports de couverture de code. Certaines classes ne devraient pas être rapportées, car elles sont en configuration de printemps et je ne suis pas intéressé par elles.

j'ai déclaré le plugin maven-jacoco comme suit:

<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>

le problème est que lorsque j'exécute mvn clean verify jacoco déclare encore des classes qui auraient dû être exclues comme ma configuration xml le souligne. Comment puis-je le configurer correctement?

55
demandé sur Koraktor 2015-01-06 16:11:54

7 réponses

votre XML est légèrement erroné, vous devez ajouter toute exclusion de classe dans un champ parent exclu, de sorte que votre configuration ci-dessus devrait ressembler à ce qui suit selon le Jacoco docs

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

les valeurs des champs d'exclusion doivent être des chemins de classe (et non des noms de paquets) des classes compilées relatives au répertoire cible / classes / en utilisant la syntaxe standard de Joker

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

vous pouvez aussi exclure un paquet et tous ses enfants / sous-paquets de cette façon:

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

cela exclura toutes les classes de some.package , ainsi que tous les enfants. Par exemple, some.package.child ne serait pas inclus dans les rapports non plus.

j'ai testé et mon rapport goal rend compte d'un nombre réduit de classes en utilisant ce qui précède.

si vous poussez alors ce rapport dans le Sonar, vous devrez alors dire au Sonar d'exclure ces classes dans l'affichage qui peut être fait dans les paramètres Sonar

Paramètres > Paramètres Généraux > Exclusions > Couverture Du Code

Sonar Docs explique un peu plus

exécuter votre commande au-dessus de

mvn clean verify

indiquera que les classes ont été exclues

sans exclusions

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

avec exclusions

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

Espérons que cette aide

93
répondu Andrew Kew 2016-12-30 22:57:09

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

ce sont les différentes notations pour les classes que nous avons:

  • Nom de la VM: java/util/Carte de Dollars Entrée
  • Nom Java: java.util.Carte De Dollars Entrée De Fichier
  • Nom: java/util/Carte$l'Entrée.classe

paramètres de L'Agent, tâches de la fourmi et préparation du Maven-objectif de l'agent

  • comprend: Java Nom de (Nom de la VM fonctionne aussi)
  • exclut: Java Nom de (Nom de la VM fonctionne aussi)
  • exclclassloader: Java Name

ces spécifications permettent les caractères génériques * et ?, où * Joker n'importe quel nombre de caractères, même plusieurs dossiers imbriqués.

Maven rapport objectif

  • comprend: nom de fichier
  • exclut: nom de fichier

Ces spécifications permettent Ant Filespec comme des caractères génériques *, ** et ? où * les caractères génériques parties d'un seul élément du chemin.

3
répondu cra6 2017-03-15 12:37:47

même si Andrew a déjà répondu à la question avec des détails , je donne le code comment l'exclure dans pom

           <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <configuration>
                    <excludes>
                        <exclude>**/*com/test/vaquar/khan/HealthChecker.class</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <!-- prepare agent for measuring integration tests -->
                    <execution>
                        <id>jacoco-initialize</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <phase>package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
2
répondu vaquar khan 2017-06-06 19:20:29

une autre solution:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.5.201505241946</version>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>default-report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>default-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule implementation="org.jacoco.maven.RuleConfiguration">
                        <excludes>
                            <exclude>com.mypackage1</exclude
                            <exclude>com.mypackage2</exclude>
                        </excludes>
                        <element>PACKAGE</element>
                        <limits>
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>COMPLEXITY</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.85</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

veuillez noter que nous utilisons "<element>PACKAGE</element>" dans la configuration qui nous aide ensuite à exclure au niveau du paquet.

2
répondu Arijit 2018-01-02 09:02:27

utilisez sonar.couverture.exclusions de la propriété.

mvn clean install -Dsonar.coverage.exclusions=**/*ToBeExcluded.java

cela devrait exclure les catégories du calcul de la couverture.

2
répondu user1401472 2018-07-09 06:33:20

vous pouvez configurer l'exclusion de couverture dans les propriétés sonar, en dehors de la configuration du plugin jacoco:

...
<properties>
    ....
    <sonar.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.exclusions>
    <sonar.test.exclusions>
        src/test/**/*
    </sonar.test.exclusions>
    ....
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.coverage.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.coverage.exclusions>
    <jacoco.version>0.7.5.201505241946</jacoco.version>
    ....
</properties>
....

et n'oubliez pas de supprimer les paramètres d'exclusion du plugin

1
répondu leon cio 2018-08-03 10:16:11

Voici l'échantillon de travail du fichier pom.xml .

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>${jacoco.version}</version>


        <executions>
            <execution>
                <id>prepare-agent</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <execution>
                <id>post-unit-test</id>
                <phase>test</phase>
                <goals>
                    <goal>report</goal>
                </goals>

            </execution>

            <execution>
                <id>default-check</id>
                <goals>
                    <goal>check</goal>
                </goals>

            </execution>
        </executions>
        <configuration>
            <dataFile>target/jacoco.exec</dataFile>
            <!-- Sets the output directory for the code coverage report. -->
            <outputDirectory>target/jacoco-ut</outputDirectory>
            <rules>
                <rule implementation="org.jacoco.maven.RuleConfiguration">
                    <element>PACKAGE</element>
                    <limits>
                        <limit implementation="org.jacoco.report.check.Limit">
                            <counter>COMPLEXITY</counter>
                            <value>COVEREDRATIO</value>
                            <minimum>0.00</minimum>
                        </limit>
                    </limits>
                </rule>
            </rules>
            <excludes>
                <exclude>com/pfj/fleet/dao/model/**/*</exclude>
            </excludes>
            <systemPropertyVariables>

                <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
            </systemPropertyVariables>
        </configuration>
    </plugin>
0
répondu divyanayan 2018-09-28 13:54:40