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 ?

3voto

Jianwu Chen Points 1732

J'ai lutté pendant des jours. J'ai essayé toutes les configurations différentes suggérées dans ce fil. Aucune d'entre elles ne fonctionne. Finalement, j'ai trouvé que la seule configuration importante est la configuration préparer-agent objectif. Mais vous devez le mettre dans la bonne phase. J'ai vu tellement d'exemples où on l'a placé dans la phase " test de pré-intégration "C'est une erreur, car il ne sera exécuté qu'après le test unitaire. Donc le test unitaire ne sera pas instrumenté.

La bonne configuration devrait juste utiliser la phase par défaut, (ne pas spécifier la phase explicitement). Et généralement, vous n'avez pas besoin de vous masser autour de 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>

2voto

xiaoLiuLiu Points 21

Essayez d'utiliser :

mvn jacoco:report -debug

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

J'ai configuré mon jacoco comme ceci :

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

Puis mvn jacoco:report -debug le montre en utilisant la configuration par défaut, ce qui signifie 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.

2voto

Manoel Campos Points 162

Cela se produit si le chemin de votre projet a des espaces vides partout, comme :

/home/user/my projects/awesome project

le rapport n'est pas généré. Si c'est le cas, supprimez ces espaces des noms de répertoire, par exemple :

/home/user/my-projects/awesome-project

ou déplacez le projet vers un répertoire qui ne comporte pas d'espaces en cours de route.

En ce qui concerne la configuration du plugin, j'ai juste besoin de la base comme ci-dessous :

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.5</version>
    <executions>
        <execution>
            <id>jacoco-initialize</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>jacoco-report</id>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>       
</plugin>

2voto

Dylan Callaghan Points 63

Je sais que c'est un peu tard, mais juste pour ceux qui ont ce problème et que rien ne semble pouvoir résoudre (comme moi). Assurez-vous que dans votre pom, votre configuration pour jacoco se trouve à l'intérieur de plugins n'est pas à son tour à l'intérieur pluginManagement . Il semble qu'une sorte de défaut pour maven soit de mettre le fichier plugins à l'intérieur de pluginManagement . Cela passe presque inaperçu jusqu'à ce que vous essayiez d'ajouter des configurations détaillées comme pour jacoco. Afin de les ajouter, vous devez les ajouter en dehors de la section pluginManagement sinon ils sont effectivement ignorés. Voir mes poms ci-dessous pour plus de détails.

Mon ancien pom (qui donnait le message "Skipping jacoco ...") :

<project>
  ...
  <build>
    <pluginManagement>
      <plugins>
        ...
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.2</version>
          <executions>
            <execution>
              <id>default-prepare-agent</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>default-report</id>
              <phase>test</phase>
              <goals>
                <goal>report</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Mon nouveau pom (qui compile maintenant un rapport jacoco fonctionnel) :

<project>
  ...
  <build>
    <pluginManagement>
      <plugins>
        ...
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <executions>
            <execution>
              <id>default-prepare-agent</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>default-report</id>
              <phase>test</phase>
              <goals>
                <goal>report</goal>
              </goals>
            </execution>
          </executions>
      </plugin>
    </plugins>
  </build>
</project>

1voto

tjm1706 Points 454

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

  • Tests unitaires ou d'intégration avec les plugins Surefire et Failsafe.
  • Findbugs.
  • Couverture des tests par Jacoco .

Où sont les résultats de Jacoco ? Après avoir testé et lancé 'mvn clean', vous pouvez trouver les résultats dans 'target/site/jacoco/index.html'. Ouvrez ce fichier dans le navigateur.

Profitez-en !

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

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