2015-10-12 41 views
7

Sembra che ci siano un paio di domande, che sono piuttosto vecchie e le cose sono cambiate dal supporto Java 8 di Jacoco.Jacoco Maven multi modulo copertura del progetto

mio Progetto contiene seguente struttura

pom.xml 
| 
| 
-----sub module A pom.xml 
| 
| 
-----sub module B pom.xml 
| 
| 
-----sub module C pom.xml 

Ho configurato il main pom come questo

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

sto eseguendo questo comando mvn clean package. Riesco a vedere che jacoco.exec viene generato, tuttavia non sono in grado di visualizzare alcun report HTML per verificare i dati.

Per favore aiutatemi. Un altro punto è, la mia configurazione è corretta per i progetti Multi-Module?

Aggiornamento

problema identificato. <destFile>${project.basedir}/../target/jacoco.exec</destFile> cambiato in <destFile>${project.basedir}/target/jacoco.exec</destFile>

report Ora è elettrogeni per singoli moduli. Qualsiasi idea di come generare il rapporto consolidato

+0

Cercate i report su 'target/site/jacoco-ut/index.html'? –

+0

@SaifAsif, si. Posso vedere solo il file 'jacoco.exec' e nessun'altra cartella creata sotto' target' – Reddy

+0

Pasi i log di 'mvn clean install' qui dalla parte quando il plugin jacoco dà il calcio in –

risposta

6

JaCoCo versione 0.7.7 può generate an aggregate coverage report da più moduli Maven attraverso un nuovo obiettivo jacoco:report-aggregate.

+0

Il supporto per i progetti multi-modulo è stato aggiunto dalla versione 0.7.7. Per chiunque sia alla ricerca di dettagli sull'utilizzo di una build Tycho, ho trovato estremamente utile questo post sul blog di Lorenzo Bettini: [Copertura del codice JaCoCo e report di più progetti plug-in di Eclipse] (http: //www.lorenzobettini .it/2017/02/jacoco-code-coverage-and-report-of-multiple-eclipse-plug-in-projects/# comment-13287) – avojak

+0

Sommario: creare un sottomodulo esclusivamente per il report aggregato e rendere questo sottomodulo dichiarare dipendenze dai sottomodelli fratelli che ha bisogno di aggregare – Hilikus

1

Copia il codice fine dell'articolo su https://dzone.com/articles/jacoco-maven-multi-module e inseriscilo .... funziona per me. Aggiungi semplicemente tutti i moduli che desideri segnalare. Inoltre avevo bisogno di cambiare antrun da 1.7 a 1.8 per le attività di formica da eseguire.

0

Un problema in progetti multimodulo è causata, se pom aggregatore viene utilizzato come pom genitore per i moduli o, come è il caso nell'esempio precedente:

- parentAggregator pom 
---sub module A pom.xml -> parentAggregator pom 
---sub module B pom.xml -> parentAggregator pom 
---sub module C pom.xml -> parentAggregator pom 

In questo caso, l'ordine di generazione è:

- parentAggregator 
- sub module A 
- sub module B 
- sub module C 

che significa che l'aggregatore principale non può raccogliere informazioni complete. Nel mio caso un trasferimento di dati in sonarQube da parte di mvn sonar: sonar ha portato a risultati inaspettati e incompleti.

Modifica della struttura del modulo a:

- 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 

cambierà l'ordine di generazione di:

- parent 
- sub module A 
- sub module B 
- sub module C 
- aggregator 

In questo caso aggregatore sarà l'ultimo e lavorare con i risultati dei moduli. Nel mio caso i risultati in SonarQube erano come previsto.