web-dev-qa-db-fra.com

Obtenir "Ignorer l'exécution de JaCoCo en raison d'un fichier de données d'exécution manquant" à l'exécution de JaCoCo

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 parviens pas à exécuter des rapports. L'erreur suivante m'obtient à plusieurs reprises: Skipping JaCoCo execution due to missing execution data file lorsque 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 se déroulent avec succès. Voici une partie de la sortie 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 quelle configuration je manque?

61
Dave

jacoco-maven-plugin: 0.7.10-SNAPSHOT

De jacoco: prepare-agent qui dit:

Une des façons de faire cela en cas de maven-surefire-plugin - est de syntaxe d'utilisation pour l'évaluation tardive des propriétés:

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>@{argLine} -your -extra -arguments</argLine>
  </configuration>
</plugin>

Notez le @{argLine} ajouté à -your -extra -arguments.

Merci Slava Semushin pour avoir remarqué le changement et rapport dans le commentaire .

jacoco-maven-plugin: 0.7.2-SNAPSHOT

Après jacoco: prepare-agent qui dit:

[org.jacoco: jacoco-maven-plugin: 0.7.2-SNAPSHOT: prepare-agent] Prépare une propriété pointant sur l'agent d'exécution JaCoCo pouvant être transmis en tant qu'argument VM à l'application testée. Cela dépend de le type de packaging du projet est par défaut une propriété avec les propriétés suivantes le nom est défini:

  • tycho.testArgLine pour le type d’emballage Eclipse-test-plugin et
  • argLine autrement.

Notez que ces propriétés ne doivent pas être écrasées par le testez la configuration, sinon l'agent JaCoCo ne peut pas être connecté. Si vous avez besoin de paramètres personnalisés, veuillez les ajouter. Par exemple:

<argLine>${argLine} -your -extra -arguments</argLine>

Résultat les informations de couverture sont collectées pendant l'exécution et par défaut écrit dans un fichier à la fin du processus.

vous devriez changer la ligne suivante dans la configuration du plugin maven-surefire-plugin à partir de (notez le ${argLine} à l'intérieur de <argLine>):

<argLine>-Xmx2048m</argLine>

à

<argLine>${argLine} -Xmx2048m</argLine>

Apportez également les modifications nécessaires à l'autre plugin maven-failsafe-plugin et remplacez le suivant (notez à nouveau le ${argLine}):

<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>

à

<argLine>${argLine} -Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
86
Jacek Laskowski

J'ai été confronté à un problème légèrement différent renvoyant la même erreur.

Skipping JaCoCo execution due to missing execution data /target/jacoco.exec

La vérité est que cette erreur est renvoyée pour de très nombreuses raisons ..__ Nous avons expérimenté différentes solutions sur Stack Overflow, mais nous avons trouvé que cette ressource était la meilleure. Il détruit les nombreuses raisons possibles pour lesquelles Jacoco pourrait renvoyer la même erreur. 

Pour nous, la solution consistait à ajouter un prepare-agent à la configuration.

<execution>
   <id>default-prepare-agent</id>
   <goals>
       <goal>prepare-agent</goal>
   </goals>
</execution>

J'imagine que la plupart des utilisateurs vont en faire l'expérience pour différentes raisons, alors jetez un coup d'œil à la ressource susmentionnée!

14
Chad Van De Hey

Dans certains cas, une autre configuration d’argline ou un plug-in dans pom pourrait annuler la configuration de l’ordre d’exécution de 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 de l'exemple 

           <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <forkCount>5</forkCount>
                    <reuseForks>true</reuseForks>
                    <argLine>-Dnet.sf.ehcache.disabled=true</argLine>
                </configuration>
            </plugin>

Après avoir supprimé argLine de ces plugins, jacoco a commencé à fonctionner normalement. 

9
Atish Narlawar

On peut également obtenir l'erreur "Saut d'exécution JaCoCo en raison de l'absence de fichier de données d'exécution" 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.

6
Tanya Jivvca

Je sais que cette question est assez ancienne, mais si quelqu'un comme moi venait chercher une réponse, cela pourrait aider. J'ai pu surmonter l'erreur ci-dessus avec cela.

1) Retirez le morceau de code ci-dessous du plugin maven-surefire-plugin

 <reuseForks>true</reuseForks>
 <argLine>-Xmx2048m</argLine>

2) Ajouter l'objectif ci-dessous:

<execution>
<id>default-prepare-agent</id>
<goals>
   <goal>prepare-agent</goal>
</goals>
</execution>
3

Qu'est-ce qui a été dit par:

changez la configuration de votre plugin en ceci:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.3.201306030806</version>
    <executions>
      <!-- prepare agent for measuring integration tests -->
      <execution>
        <id>prepare-integration-tests</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
        <configuration>
          <destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
        </configuration>
      </execution>
      <execution>
        <id>jacoco-site</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report</goal>
        </goals>
        <configuration>
          <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
        </configuration>
      </execution>
    </executions>
  </plugin>

Edit: Nous venons de remarquer une chose importante, destFile et dataFile semble sensible à la casse, il est donc supposé être destFile et non destfile.

3
BoneGoat

J'ai ajouté un projet Maven/Java avec 1 classe de domaine avec les fonctionnalités suivantes: 

  • Tests d'unité ou d'intégration avec les plugins Surefire et Failsafe. 
  • Findbugs.
  • Testez la couverture via Jacoco.

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 regroupe de nombreuses suggestions issues de ces publications dans un exemple de projet. Merci, contributeurs!

2
tjm1706

Essayez d'utiliser:

mvn jacoco:report -debug

pour voir les détails de votre processus de reporting.

J'ai configuré mon jacoco comme ceci:

<configuration>
    <dataFile>~/jacoco.exec</dataFile>
    <outputDirectory>~/jacoco</outputDirectory>
</configuration>

Alors mvn jacoco:report -debug l'affiche en utilisant la configuration par défaut, ce qui signifie que jacoco.exec n'est pas dans ~/jacoco.exec. L'erreur dit missing execution data file.

Il suffit donc d'utiliser la configuration par défaut:

<execution>
    <id>default-report</id>
    <goals>
    </goals>
    <configuration>
        <dataFile>${project.build.directory}/jacoco.exec</dataFile>
        <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory>
    </configuration>
</execution>

Et tout fonctionne bien.

0
xiaoLiuLiu

J'ai essayé toutes les réponses mais seule la combinaison de conseils suivante a fonctionné pour moi. Pourquoi? J'ai eu des exigences très spécifiques:

  1. JaCoCo génère un rapport lorsque la construction est exécutée à partir de la ligne de commande: mvn clean verify (Maven 3.6.0)
  2. Intellij IDEA (2019.01) exécute également mes tests
  3. Tout fonctionne en présence d'une autre javaagent définie dans le plugin surefire

Solution - prepend argLine valeur dans surefire configuration avec la propriété maven "remplacement tardif" @{...} comme expliqué dans surefireFAQ ( ma configuration fixe )

Comment utiliser les propriétés définies par d'autres plugins dans argLine? Maven remplace la propriété

$ {...} valeurs dans pom.xml avant l'exécution d'un plugin. Surefire ne verrait donc jamais les détenteurs d’emplacement dans sa propriété argLine. Depuis la version 2.17 utilisant une syntaxe alternative pour ces propriétés,

@ {...} autorise le remplacement tardif des propriétés lors de l'exécution du plug-in. Les propriétés modifiées par d'autres plug-ins seront donc correctement prises en compte.

Echec du premier essai - définir jaCoCoArgLine propriété dans la configuration d'objectif prepare-agent de jacoco - le scénario a échoué ma deuxième condition, IntelliJ IDEA n'a pas pu trouver l'agent de jmockit que j'utilise dans le projet méthode statique moqueuse

0
Pawel

L'exécution indique que les données jacoco sont placées dans /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec mais que votre configuration maven recherche les données dans $ {basedir}/target/couverture-reports/jacoco-unit. exec.

0
tdrury

Parfois, l'exécution est exécutée pour la première fois, et lorsque nous effectuons une installation propre de Maven, elle ne génère pas par la suite. Supprimez-les s'ils ont été introduits dans un problème ou une suggestion.

0
Srini M

Ma réponse est très tardive, mais pour d'autres utilisateurs Dans votre cas, vous devez configurer le plug-in de sécurité pour utiliser la configuration de l'agent de ligne de commande enregistrée dans la variable itCoverageAgent . Par exemple 

<configuration>
    <argLine>${itCoverageAgent}</argLine>
</configuration>

Dans votre configuration maven, jacoco prépare les arguments de ligne de commande lors de la phase de préparation de l'agent, mais le plug-in de sécurité ne l'utilise pas et ne contient donc pas de fichier de données d'exécution.

0
jpl

J'ai lutté pendant des jours. J'ai essayé toutes les différentes configurations suggérées dans ce fil. Aucun d'entre eux ne fonctionne. Enfin, je trouve que seule la configuration importante est l’objectif prepare-agent. Mais vous devez le mettre dans la bonne phase. J'ai vu tellement d'exemples le mettre dans " pré-intégration-test ", c'est trompeur, car il ne sera exécuté qu'après le test unitaire. Donc, le test unitaire ne sera pas instrumenté.

La bonne configuration devrait simplement utiliser la phase par défaut (ne spécifiez pas explicitement la phase). Et généralement, vous n'avez pas besoin de masser maven-surefire-plugin .

  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.4</version>
    <executions>
      <execution>
        <id>default-prepare-agent</id>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>jacoco-site</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
0
Jianwu Chen