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