2015-05-18 12 views
5

Sono abbastanza nuovo per JaCoCo e sto riscontrando problemi nella generazione del mio rapporto sulla copertura del codice.JaCoCo: directory delle classi mancanti

Questa è la mia struttura di progetto:

miei test di integrazione vivono all'interno del modulo "...- integrazione-test". Quando costruisco il mio progetto utilizzando mvn ottengo il seguente nella mia registrazione:

[INFO] Skipping JaCoCo execution due to missing classes directory: ...-integration-tests\target\classes 

Questo è vero perché il mio codice compilato è disponibile solo nelle bersaglio> classi del modulo corrispondente.

Qual è il modo migliore per farlo funzionare? Grazie in anticipo!

+0

First Di tutti mentre esegui il test di integrazione IT, devi eseguire il .war dell'applicazione dietro a Tomcat o JVM simile. Devi allegare jacocoagent.jar e fornire destfile = jacocoIT.exe o un nome allo script di inizio JVM (Tomcat) di destinazione o passare ad esso le Opzioni. Quindi, otterrà i file di classe. Al momento, tratta il tuo modulo di test IT come un progetto e non ci sono classi lì. Dove stai generando i file di classe per il codice sorgente del test IT? –

risposta

0

Questo accade perché JaCoCo "rapporto" mojo sta cercando di trovare le fonti e le classi di "default" layout del progetto Maven:

@Override 
boolean canGenerateReportRegardingClassesDirectory() { 
    return new File(getProject().getBuild().getOutputDirectory()).exists(); 
} 

avere layout simile alla tua sono stato in grado di aggirare le limitazioni di configurazione JaCoCo impostando in modo esplicito build.sourceDirectory e build.outputDirectory per indicare le parti interne del modulo testato. Dopo di che Maven cercato di compilare per la seconda volta, così ho anche dovuto esclusione di default compilazione esecuzione, importante (e condivisibile) parte del mio test modulo pom.xml ora simile a questa:

<?xml version="1.0" encoding="UTF-8"?> 
<project ... 
... 
    <parent> 
... 
    </parent> 

    <dependencies> 
... 
    </dependencies> 

    <properties> 
... 
    </properties> 

    <build> 
     <sourceDirectory>../../Source</sourceDirectory> <!-- tested sources root, in proper layout: src/main/java --> 
     <outputDirectory>../bin</outputDirectory> <!-- tested classes root, in proper layout: target/classes --> 

     <testSourceDirectory>${project.basedir}/../../Test/java</testSourceDirectory> <!-- if tests code also taken from outside --> 

     <testResources> 
      ... 
     </testResources> 

     <plugins> 
... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <executions> 
        <!-- disabling default-compile --> 
        <execution> 
         <id>default-compile</id> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
         <phase>compile</phase> 
         <configuration> 
          <source>1.7</source> 
          <target>1.7</target> 
          <includes/> 
          <excludes> 
           <exclude>**/*.java</exclude> 
          </excludes> 
         </configuration> 
        </execution> 
... 
       </executions> 
      </plugin> 

      <!-- typical jacoco usage --> 
      <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>prepare-agent</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>report</id> 
         <phase>prepare-package</phase> 
         <goals> 
          <goal>report</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.16</version> 
       <dependencies> 
        <dependency> 
         <groupId>org.apache.maven.surefire</groupId> 
         <artifactId>surefire-junit4</artifactId> 
         <version>2.10</version> 
        </dependency> 
       </dependencies> 
       <configuration> 
... 
        <argLine>${argLine} -XX:PermSize=512M -XX:MaxPermSize=512M -Xmx1024M</argLine> 
... 
        <forkCount>1</forkCount> 
        <reuseForks>true</reuseForks> 
       </configuration> 
       <executions> 
... 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project>