Obtenir "Sauter L'exécution de JaCoCo en raison de données d'exécution manquantes" 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 des tests unitaires seulement mais je ne peux pas obtenir des rapports à exécuter, obtenant à plusieurs reprises l'erreur 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 fonctionnent 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?

54
demandé sur Jacek Laskowski 2013-08-07 19:22:50

9 réponses

jacoco-maven-plugin: 0.7.10-SNAPSHOT

à Partir de jacoco:préparez-agent qui dit:

l'Une des façons de le faire en cas de maven-surefire-plugin - est à l'utilisation de la syntaxe pour la fin de l'évaluation d'une propriété:

<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 .

Merci Slava Semushin pour remarquant le changement et dans le commentaire .

jacoco-maven-plugin: 0.7.2-SNAPSHOT

Suivant jacoco:préparez-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 à la demande en vertu de test. Selon le type d'emballage de projet par défaut une propriété avec les suivants nom est placé:

  • tycho.testArgLine for packaging type eclipse-test-plugin et
  • argLine autrement.

noter que ces propriétés ne doivent pas être écrasées par le configuration d'essai, sinon L'agent JaCoCo ne peut pas être attaché. Si vous avez besoin de paramètres personnalisés, veuillez les ajouter. Exemple:

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

résultat les informations de couverture sont collectées lors de l'exécution et par défaut écrit dans un fichier lorsque le processus se termine.

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

<argLine>-Xmx2048m</argLine>

à

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

faire aussi les changements nécessaires à l'autre plugin maven-failsafe-plugin et remplacer le texte suivant (noter à nouveau le ${argLine} ):

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

à

<argLine>${argLine} -Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
75
répondu Jacek Laskowski 2017-05-23 10:30:52

j'ai fait face à un peu d'un problème différent qui a retourné la même erreur.

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

La vérité est, cette erreur est retournée pour de très nombreuses raisons. Nous avons expérimenté les différentes solutions sur le débordement de la pile, mais nous avons trouvé que cette" ressource était la meilleure. Cela détruit les nombreuses raisons possibles pour lesquelles Jacoco pourrait retourner la même erreur.

pour nous, la solution était d'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 vont l'expérimenter pour différentes raisons, alors jetez un oeil à la ressource susmentionnée!

10
répondu Chad Van De Hey 2016-12-06 23:20:05

il pourrait y avoir un cas où une autre configuration d'argline ou un autre plugin dans pom pourrait supplanter la configuration de l'ordre d'exécution de jacoco.

argLine - 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

L'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é d'argLine de ces plugins, jacoco a commencé à travailler normalement.

8
répondu Atish Narlawar 2014-08-26 13:04:28

on peut également obtenir "Sauter L'exécution JaCoCo en raison de données d'exécution manquantes" erreur due à des tests manquants dans le projet. Par exemple, lorsque vous lancez un nouveau projet et que vous n'avez pas de Test.les fichiers java.

5
répondu Tanya Jivvca 2017-10-10 07:32:35

FWhat tdrury said:

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: Juste remarqué une chose importante, destFile et dataFile semble sensible à la casse donc il est censé être destFile, pas destfile.

3
répondu BoneGoat 2013-09-27 10:21:03

je sais que cette question est assez ancienne mais si quelqu'un comme moi vient ici pour chercher une réponse alors cela pourrait aider. J'ai été capable de surmonter l'erreur ci-dessus avec ceci.

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

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

2) Ajouter l'objectif suivant:

<execution>
<id>default-prepare-agent</id>
<goals>
   <goal>prepare-agent</goal>
</goals>
</execution>
3
répondu Always a newComer 2017-03-05 18:52:23

j'ai ajouté un projet Maven / Java avec 1 classe de domaine avec les caractéristiques suivantes:

  • test D'unité ou D'intégration avec les plugins Surefire et Failsafe.
  • Findbugs.
  • Test de couverture par l'intermédiaire de Jacoco .

Profitez-en!

j'ai essayé de garder le projet aussi simple que possible. Le projet rassemble de nombreuses suggestions de ces billets dans un projet d'exemple. Merci, contributeurs!

1
répondu tjm1706 2018-05-10 12:55:05

l'exécution dit qu'elle met les données jacoco dans /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec mais maven configuration est à la recherche pour les données dans ${basedir}/cible/couverture-rapports/jacoco-unité.exec.

0
répondu tdrury 2013-08-08 20:56:46

ma réponse est très en retard mais pour les autres utilisateurs Dans votre cas, vous devez configurer failsafe pluging pour utiliser la configuration agent en 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 en ligne de commande en phase prepare-agent, mais le plugin failsafe ne l'utilise pas donc il n'y a pas de fichier de données d'exécution.

0
répondu jpl 2017-12-02 10:08:14