Il semble qu'il y ait quelques questions, qui sont assez anciennes et les choses ont changé de Java 8 support de Jacoco.
Mon projet contient la structure suivante
pom.xml
|
|
-----sub module A pom.xml
|
|
-----sub module B pom.xml
|
|
-----sub module C pom.xml
J'ai configuré le main pom
comme ça
Main POM.xml
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>jacoco-multi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>projectA</module>
<module>projectB</module>
</modules>
<properties>
<jacoco.version>0.5.7.201204190339</jacoco.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit-dep</artifactId>
<version>4.10</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3.RC2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3.RC2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<configuration>
<destFile>${project.basedir}/../target/jacoco.exec</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.16</version>
<executions>
<execution>
<id>default-integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
</plugin>
</plugins>
</build>
</project>
Un Pom.xml
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>jacoco-multi</artifactId>
<groupId>com.test</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>projectA</artifactId>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
B pom.xml
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>jacoco-multi</artifactId>
<groupId>com.test</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>projectB</artifactId>
<dependencies>
<dependency>
<groupId>com.test</groupId>
<artifactId>projectA</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
</plugin>
</plugins>
</pluginManagement>
</build>
J'exécute cette commande mvn clean package
. Je peux voir que jacoco.exec est généré, mais je ne suis pas en mesure de voir que des rapports HTML sont en train de vérifier les données.
S'il vous plait, j'ai besoin de votre aide avec ceci. Un autre point est que ma configuration est correcte pour Multi-Module
projets?
Mise à jour
Problème identifié. <destFile>${project.basedir}/../target/jacoco.exec</destFile>
changé en <destFile>${project.basedir}/target/jacoco.exec</destFile>
Il génère maintenant des rapports pour des modules individuels. Toute idée de la façon de générer un rapport consolidé
La version 0.7.7 de JaCoCo peut générer un rapport de couverture agrégé à partir de plusieurs modules Maven via un nouvel objectif jacoco:report-aggregate
.
Après avoir scanné de nombreuses solutions, j'ai créé un projet de démonstration simple mais complet Jacoco montrant:
Profitez du projet de démonstration simple .
Copiez la fin du code de l'article à https://dzone.com/articles/jacoco-maven-multi-module et mettez-le dans .... ça marche pour moi. Ajoutez simplement autant de modules que vous le souhaitez. J'ai également dû changer antrun de 1.7 à 1.8 pour que les tâches de fourmi s'exécutent.
Un problème dans les projets multimodules est causé, si le pom d'agrégateur est utilisé comme pom parent pour les modules, comme c'est le cas dans l'exemple ci-dessus:
- parentAggregator pom
---sub module A pom.xml -> parentAggregator pom
---sub module B pom.xml -> parentAggregator pom
---sub module C pom.xml -> parentAggregator pom
Dans ce cas, l'ordre de construction est le suivant:
- parentAggregator
- sub module A
- sub module B
- sub module C
ce qui signifie que l'agrégateur parent ne peut pas collecter des informations complètes. Dans mon cas, un transfert de données dans sonarQube par mvn sonar: sonar a entraîné des résultats inattendus et incomplets.
Changer la structure du module pour:
- aggregator pom
-- parent pom
---sub module A pom.xml -> parent pom
---sub module B pom.xml -> parent pom
---sub module C pom.xml -> parent pom
changera l'ordre de construction en:
- parent
- sub module A
- sub module B
- sub module C
- aggregator
Dans ce cas, l'agrégateur sera le dernier et fonctionnera avec les résultats des modules. Dans mon cas, les résultats dans SonarQube étaient comme prévu.