Nous avons un projet multi-module Maven composé d'un parent (HelloWorld) et de différents enfants (HelloWorldServices et HelloWorldPresentation) et utilisons Jenkins pour construire.
L'erreur après l'exécution du test réussi est
[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:report (default-cli) @ HelloWorldServices ---
[INFO] Skipping JaCoCo execution due to missing execution data file:/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec
Les lignes avant qu'il ne dise
[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:prepare-agent (default-cli) @ HelloWorldServices ---
[INFO] argLine set to -javaagent:/var/lib/jenkins/.m2/repository/org/jacoco/org.jacoco.agent/0.7.6.201602180812/org.jacoco.agent-0.7.6.201602180812-runtime.jar=destfile=/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec
Voici comment j'ai défini le plugin parent pom JaCoCo:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<configuration>
<destfile>${project.artifactId}/target/jacoco.exec</destfile>
<datafile>${project.artifactId}/target/jacoco.exec</datafile>
</configuration>
<executions>
<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>
En aucun cas, je n'ai mentionné explicitement infaillible. J'ai aussi essayé ce que l'on trouve partout pour mettre l'argLine dans la configuration mais avec le même résultat. Le fichier JaCoCo .exec n'a jamais été créé, quoi que je fasse. Quant aux objectifs, j'utilise
mvn clean install jacoco:prepare-agent jacoco:report
Depuis que j'omets les objectifs jacoco, il n'affiche même pas le message INFO.
Vous ne devez pas appeler l'agent après la phase d'installation mais avant, donc au lieu d'invoquer:
mvn clean install jacoco:prepare-agent jacoco:report
Vous devez invoquer
mvn clean jacoco:prepare-agent install jacoco:report
La raison principale est: l'agent ne participera pas au cycle de vie de la construction, la phase test
sera déjà exécutée dans le cadre de la phase install
, puis Maven exécutera l'agent selon l'invocation de la ligne de commande , mais il sera trop tard.
Vous devriez probablement également changer la configuration du plug-in ci-dessus pour:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<executions>
<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>
Remarque: J'ai supprimé la section de configuration, car elle pointait en fait vers des valeurs par défaut. De plus, les éléments XML sont sensibles à la casse ici, donc votre élément datafile
a été simplement ignoré, il aurait dû être dataFile
à la place. La même chose s'applique à destFile
.
Le prepare-agent
objectif utilise déjà ${project.build.directory}/jacoco.exec
comme valeur par défaut destFile
, la même chose s'applique à la valeur dataFile
pour l'objectif report
. La principale raison de ce changement serait une version plus flexible et standard, ne s'appuyant pas sur artifactId
comme nom de projet (par défaut, mais toujours pas obligatoire) et utilisant la version plus générique ${project.build.directory}
au lieu de cela pointer directement vers target
.
Remarque finale: assurez-vous de configurer les exécutions du plug-in Jacoco dans le build/plugins
section et non build/pluginManagement/plugins
section. La section pluginManagement
est destinée à la gouvernance et à l'harmonisation commune des versions ou configurations, mais elle sera ignorée si le plugin correspondant ne serait pas déclaré sous build/plugins
.
Selon référence officielle Maven POM
pluginManagement : est un élément visible le long des plugins latéraux. Plugin Management contient des éléments de plug-in de la même manière, sauf que plutôt que de configurer les informations de plug-in pour cette version de projet particulière, il est destiné à configurer des versions de projet héritant de celle-ci. Cependant, cela ne configure que les plugins qui sont réellement référencés dans l'élément plugins chez les enfants. Les enfants ont le droit de remplacer les définitions de
pluginManagement
.
(note: gras est le mien)
Je pense que "destfile" et "datafile" sont sensibles à la casse alors essayez de les remplacer par "destFile" et "dataFile", peut-être que ça marchera :)
Les raisons pour lesquelles le fichier de données d'exécution ne sera pas créé sont les suivantes.
- Les tests ne sont pas présents.
- Tous les tests sont ignorés.
- Le plugin Surefire est manquant.
- L'objectif de préparation d'agent de JaCoCo n'est pas exécuté, ce qui définit argLine qui doit être configuré pour s'éteindre.
- Le plugin Surefire n'est pas configuré avec l'agent de JaCoCo.