J'utilise Maven 3.0.3, JUnit 4.8.1 et Jacoco 0.6.3.201306030806, et j'essaie de créer des rapports de couverture de test.
J'ai un projet avec des tests unitaires uniquement, mais je ne peux pas faire exécuter de rapports, j'obtiens à plusieurs reprises l'erreur: Skipping JaCoCo execution due to missing execution data file
quand je lance:
mvn clean install -P test-coverage
Voici comment mon pom est configuré:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx2048m</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
...
<profile>
<id>test-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<configuration>
<destfile>${basedir}/target/coverage-reports/jacoco-unit.exec</destfile>
<datafile>${basedir}/target/coverage-reports/jacoco-unit.exec</datafile>
</configuration>
<executions>
<execution>
<id>prepare-unit-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- prepare agent for measuring integration tests -->
<execution>
<id>prepare-integration-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<propertyName>itCoverageAgent</propertyName>
</configuration>
</execution>
<execution>
<id>jacoco-site</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Tous mes tests fonctionnent avec succès. Voici quelques-uns des résultats de Maven:
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-unit-tests) @ myproject ---
[INFO] argLine set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
...
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0
[INFO]
...
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-integration-tests) @ myproject ---
[INFO] itCoverageAgent set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (default) @ myproject ---
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:verify (default) @ myproject ---
[INFO] Failsafe report directory: /Users/davea/Dropbox/workspace/myproject/target/failsafe-reports
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (jacoco-site) @ myproject ---
[INFO] Skipping JaCoCo execution due to missing execution data file
[INFO]
Des idées sur la configuration qui me manque?
destFile
et l'avons laissé écrire dans le fichier cible par défaut / jacoco.exec.Réponses:
jacoco-maven-plugin: 0.7.10-INSTANTANÉ
De jacoco: agent de préparation qui dit:
Notez le
@{argLine}
qui est ajouté à-your -extra -arguments
.Merci Slava Semushin pour avoir remarqué le changement et signalé dans le commentaire .
jacoco-maven-plugin: 0.7.2-INSTANTANÉ
Suivant jacoco: agent de préparation qui dit:
vous devriez changer la ligne suivante dans la
maven-surefire-plugin
configuration du plugin à partir de (notez l'${argLine}
intérieur<argLine>
):à
Apportez également les modifications nécessaires à l'autre plugin
maven-failsafe-plugin
et remplacez ce qui suit (encore une fois, notez le${argLine}
):à
la source
@{argLine}
.mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"
. Je ne déclare pas explicitement maven-surefire-plugin et ne définit pas les configurations. Je viens d'ajouter l'espace réservé argLine dans la ligne de commande maven commemvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
. Le fichier jacoco.exec est maintenant généré et le rapport de couverture est généré dans le sondeur.J'ai été confronté à un problème différent qui a renvoyé la même erreur.
La vérité est que cette erreur est renvoyée pour de très nombreuses raisons. Nous avons expérimenté les différentes solutions sur Stack Overflow, mais nous avons trouvé que cette ressource était la meilleure. Cela démolit les nombreuses raisons potentielles pour lesquelles Jacoco pourrait renvoyer la même erreur.
Pour nous, la solution était d'ajouter un agent de préparation à la configuration.
J'imagine que la plupart des utilisateurs en feront l'expérience pour différentes raisons, alors jetez un œil à la ressource susmentionnée!
la source
**/*Test.java
lorsque mes classes de test ont été nommées*Tests.java
*Test.java
classe et une méthode de test annotée avec@Test
pour que Jacoco puisse faire quelque chose. 2. Dans les variables d'environnement Travis pour mon projet, il y avait une faute de frappeSONART_TOKEN=*****
, aurait dû être nomméSONAR_TOKEN=*****
. Consultez la documentation Travis ici , recherchezor define SONAR_TOKEN in your Repository Settings
. Après avoir corrigé cela, la construction s'est exécutée avec succès. Vous pouvez voir mon projet gitbhub en question .Il peut arriver qu'une autre configuration ou plugin d'argline dans pom remplace la configuration de l'ordre d'exécution jacoco.
argLine défini sur -
javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
Un des exemples
Après avoir supprimé argLine de ces plugins, jacoco a commencé à fonctionner normalement.
la source
On peut également obtenir l'erreur «Sauter l'exécution de JaCoCo en raison d'un fichier de données d'exécution manquant» en raison de tests manquants dans le projet. Par exemple, lorsque vous lancez un nouveau projet et que vous n'avez aucun fichier * Test.java.
la source
F Ce que Tdrury a dit:
changez la configuration de votre plugin en ceci:
Edit: Je viens de remarquer une chose importante, destFile et dataFile semblent sensibles à la casse, ils sont donc censés être destFile, pas destfile.
la source
Je sais que cette question est assez ancienne, mais si quelqu'un comme moi vient ici à la recherche d'une réponse, cela pourrait aider. J'ai pu surmonter l'erreur ci-dessus avec cela.
1) Supprimez le morceau de code ci-dessous du plugin maven-surefire-plugin
2) Ajoutez l'objectif ci-dessous:
la source
Je suis tombé sur le même problème tout à l'heure.
J'ai une classe nommée
HelloWorld
, et j'ai créé une classe de test pour elle nomméeHelloWorldTests
, puis j'ai obtenu la sortieSkipping JaCoCo execution due to missing execution data file.
J'ai ensuite essayé de changer mon
pom.xml
pour le faire fonctionner, mais la tentative a échoué.Enfin, je renomme simplement
HelloWorldTests
enHelloWorldTest
, et cela a fonctionné!Je suppose donc que, par défaut , jacoco ne reconnaît que la classe de test nommée like
XxxTest
, ce qui indique que c'est la classe de test pourXxx
. Renommez simplement vos classes de test dans ce format devrait fonctionner!la source
J'ai essayé toutes les réponses, mais seule la combinaison de conseils suivante a fonctionné pour moi. Pourquoi? J'avais des exigences très spécifiques:
mvn clean verify
(Maven 3.6.0)javaagent
défini dans lesurefire
pluginSolution - ajouter la
argLine
valeur dans lasurefire
configuration avec la propriété maven "remplacement tardif"@{...}
comme expliqué dans lasurefire
FAQ ( ma configuration fixe )Échec du premier essai - définir la propriété jaCoCoArgLine dans la
prepare-agent
configuration de l'objectif dejacoco
- le scénario a échoué ma deuxième exigence, IntelliJ IDEA n'a pas pu déterminer l'agent pour jmockit que j'utilise dans le projet pour la simulation de méthode statiquela source
J'ai ajouté un projet Maven / Java avec 1 classe de domaine avec les fonctionnalités suivantes:
Où sont les résultats Jacoco? Après avoir testé et exécuté «mvn clean», vous pouvez trouver les résultats dans «target / site / jacoco / index.html». Ouvrez ce fichier dans le navigateur.
Prendre plaisir!
J'ai essayé de garder le projet aussi simple que possible. Le projet rassemble de nombreuses suggestions issues de ces articles dans un exemple de projet. Merci, contributeurs!
la source
J'ai lutté pendant des jours. J'ai essayé toutes les différentes configurations suggérées dans ce fil. Aucun d'eux ne fonctionne. Enfin, je trouve que seule la configuration importante est l' objectif de préparation de l'agent . Mais vous devez le mettre dans la bonne phase. J'ai vu tant d'exemples le mettre dans le " test de pré-intégration ", c'est trompeur, car il ne sera exécuté qu'après le test unitaire. Le test unitaire ne sera donc pas instrumenté.
La bonne configuration doit simplement utiliser la phase par défaut (ne spécifiez pas la phase explicitement). Et généralement, vous n'avez pas besoin de vous masser de maven-surefire-plugin .
la source
L'exécution dit qu'elle met les données jacoco dans /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec mais votre configuration maven recherche les données dans $ {basedir} / target / coverage-reports / jacoco-unit. exec.
la source
Ma réponse est très tardive mais pour les autres utilisateurs Dans votre cas, vous devez configurer le branchement de sécurité pour utiliser la configuration de l'agent de ligne de commande enregistrée dans la variable itCoverageAgent. Par exemple
Dans votre configuration maven, jacoco prépare les arguments de ligne de commande dans la phase de préparation de l'agent, mais le plugin de sécurité ne l'utilise pas donc il n'y a pas de fichier de données d'exécution.
la source
Essayez d'utiliser:
pour voir les détails de votre processus de signalement.
J'ai configuré mon jacoco comme ceci:
Puis l'
mvn jacoco:report -debug
affiche en utilisant la configuration par défaut, ce qui signifie qu'iljacoco.exec
n'est pas dans~/jacoco.exec
. L'erreur ditmissing execution data file
.Alors utilisez simplement la configuration par défaut:
Et tout fonctionne bien.
la source
Parfois, l'exécution s'exécute pour la première fois, et lorsque nous effectuons une installation propre, elle ne se produit pas après cela. Le problème était d'utiliser true pour skipMain et skip propriétés sous maven-compiler-plugin du fichier pom principal. Supprimez-les s'ils ont été introduits dans le cadre d'un problème ou d'une suggestion.
la source
Dans mon cas, l'agent de préparation avait une
destFile
configuration différente , mais en conséquence, le rapport devait être configuré avec undataFile
, mais cette configuration était manquante. Une fois le adataFile
été ajouté, il a commencé à fonctionner correctement.la source