182 votes

Obtention du message "Skipping JaCoCo execution due to missing execution data file" lors de 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 uniquement des tests unitaires, mais je n'arrive pas à faire fonctionner les rapports, j'obtiens sans cesse l'erreur suivante : Skipping JaCoCo execution due to missing execution data file quand je cours :

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] 

Une idée de la configuration qui me manque ?

177voto

Jacek Laskowski Points 6668

Jacoco-maven-plugin:0.7.10-SNAPSHOT

De jacoco:prepare-agent qui dit :

L'une des façons de le faire dans le cas de maven-surefire-plugin - est de utiliser la syntaxe 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} qui est ajouté à -your -extra -arguments .

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

jacoco-maven-plugin:0.7.2-SNAPSHOT

Suivant jacoco:prepare-agent qui dit :

[org.jacoco:jacoco-maven-plugin:0.7.2-SNAPSHOT:prepare-agent] Prépare une propriété pointant vers l'agent d'exécution JaCoCo qui peut être transmis comme argument VM à l'application testée. En fonction de le type de packaging du projet, une propriété portant le nom suivant est nom suivant est défini :

  • tycho.testArgLine pour le type de conditionnement eclipse-test-plugin et
  • argLine sinon.

Notez que ces propriétés ne doivent pas être écrasées par la fonction configuration du test, sinon l'agent JaCoCo ne pourra pas être attaché. 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 écrites dans un fichier lorsque le processus se termine.

vous devez modifier la ligne suivante dans maven-surefire-plugin de la configuration du plugin (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 ce qui suit (remarquez à nouveau le ${argLine} ) :

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

à

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

34voto

Chad Van De Hey Points 1011

J'ai rencontré un problème un peu différent qui a donné lieu à la même erreur.

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

En réalité, cette erreur est renvoyée pour de très nombreuses raisons. Nous avons essayé les différentes solutions proposées par Stack Overflow, mais avons trouvé ceci ressource pour être le meilleur. Il examine les nombreuses raisons potentielles pour lesquelles Jacoco pourrait renvoyer la même erreur.

Pour nous, la solution a consisté à ajouter un agent de préparation à la configuration.

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

J'imagine que la plupart des utilisateurs rencontrent ce problème pour des raisons différentes, alors jetez un coup d'œil à la ressource susmentionnée !

27voto

Tanya Jivvca Points 133

On peut également obtenir l'erreur "Skipping JaCoCo execution due to missing execution data file" 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.

18voto

Atish Narlawar Points 121

Il se peut qu'une autre configuration d'argline ou un plugin dans pom remplace la configuration de l'ordre d'exécution de jacoco.

argLine réglé 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

           <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 s'être débarrassé de argLine de ces plugins, jacoco a commencé à fonctionner normalement.

8voto

Je sais que cette question est assez ancienne, mais si quelqu'un comme moi vient ici à la recherche d'une réponse, cela pourrait l'aider. J'ai pu surmonter l'erreur ci-dessus avec ceci.

1) Supprimez le morceau de code suivant du plugin maven-surefire-plugin

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

2) Ajoutez l'objectif ci-dessous :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X