web-dev-qa-db-fra.com

Exclusion des classes Lombok du rapport de couverture Sonar

Dernier plugin Jacoco (toujours en version snapshot, 0.7.10-SNAPSHOT), a une nouvelle fonctionnalité intéressante pour filtrer le code généré par Lombok ( https://github.com/jacoco/jacoco/wiki/FilteringOptions ). Tout ce que nous devons faire est d'ajouter un lombok.config fichier à la racine du référentiel avec

lombok.addLombokGeneratedAnnotation=true 

Lorsque je génère le rapport Jacoco en interne, je vois la différence. Cependant, lorsque mon travail régulier de qualité s'exécute et publie le résultat dans Sonar, j'obtiens des résultats différents (c'est-à-dire pires).

Comment se fait-il que je n'ai pas les mêmes résultats dans mon rapport local et dans Sonar? Y a-t-il une solution de contournement ?

11
Vincent F

Comme mentionné ici: https://github.com/jacoco/jacoco/pull/513#issuecomment-293176354

le filtrage est effectué au moment de la génération du rapport (création de html, xml, etc.), pas au moment de la collecte des informations d'exécution (création du fichier exec). De sorte que les outils qui lisent les données d'exécution directement au lieu de lire du xml (ce qui est une sorte d'erreur de leur côté de s'appuyer sur un format intermédiaire purement interne, mais ce qui est fait est fait) et créent leur propre rapport (comme SonarQube, Jenkins, etc. ) devra mettre à jour sa dépendance vis-à-vis de JaCoCo une fois qu'il sera publié afin d'obtenir le filtrage des rapports. Nous en informerons explicitement les projets en aval (en particulier tous ceux mentionnés ci-dessus) lorsque notre publication sera terminée. Encore une fois, soyez patient. Merci de votre compréhension.

Je n'ai pas trouvé de moyen pour Sonar de lire le rapport final au lieu du fichier exec, donc je suppose que nous devons être patients et attendre la sortie officielle du plugin jacoco 0.7.10 puis une mise à jour côté Sonar!

------ MISE À JOUR 9 mai 2018

De nouvelles versions ont été publiées et je peux confirmer que cela fonctionne pour moi.

En utilisant :

  • Sonar 6.7
  • Plugin SonarJava 5.1.1.13214
  • plugin jacoco maven 0.8.1
  • lombok.addLombokGeneratedAnnotation = true dans lombok.config

J'obtiens maintenant de bien meilleurs résultats de couverture signalés à Sonar, car le code généré par Lombok est maintenant ignoré. Cela aide vraiment à identifier les "véritables" zones découvertes et à déterminer si elles sont risquées ou non.

12
Vincent F

Vous devez d'abord vérifier que votre version de lombok est au moins 1.16.14

pom.xml :

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
    <version>1.16.14</version>
</dependency>

Ensuite, vous devez vérifier que votre version Jacoco est au moins .8.

pom.xml :

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
    <!-- // -->
</plugin>

Ensuite, vous devez ajouter un lombok.config fichier dans le dossier src de votre projet (pas dans le dossier resources)

lombok.config :

# tells Lombok that this is the root directory and that it shouldn’t search parent directories for more configuration files
config.stopBubbling = true
# tells Lombok to add @lombok.Generated annotation to all generated methods
lombok.addLombokGeneratedAnnotation = true
0
veben