2015-05-18 13 views
5

Ich bin ziemlich neu in JaCoCo und ich habe Probleme, meinen Code Coverage Report zu generieren.JaCoCo: Verzeichnis fehlender Klassen

Das ist meine Projektstruktur:

Meine Integrationstests leben in dem "...- Integrationstests" -Modul. Wenn ich mein Projekt mit mvn baue ich folgendes in meiner Protokollierung erhalten:

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

Das ist wahr, weil meine kompilierten Code nur in dem Ziel> Klassen des entsprechenden Moduls ist.

Wie funktioniert das am besten? Danke im Voraus!

+0

Erste Wenn Sie den IT-Integrationstest ausführen, müssen Sie die .war-Datei des Projekts hinter Tomcat oder einer ähnlichen JVM ausführen. Sie müssen jacocoagent.jar anhängen und dem Start-Skript Ihres Ziel-JVM (Tomcat) dest_file = jacocoIT.exe oder einen Namen geben oder die Optionen an dieses übergeben. Dann erhält es die Klassendateien. Im Moment behandelt es Ihr IT-Testmodul als Projekt und es gibt dort keine Klassen. Wo generieren Sie die Klassendateien für den IT-Testquellcode? –

Antwort

0

Dies geschieht, weil JaCoCo „Bericht“ mojo Quellen und Klassen in „default“ Maven Projekt Layout versucht, zu finden:

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

mit ähnlichem Layout zu Ihrem ich in der Lage war JaCoCo Konfiguration Einschränkungen zu umgehen, indem sie explizit einstellen build.sourceDirectory und build.outputDirectory auf die Interna Ihres getesteten Moduls zeigen. Danach Maven es für zweites Mal zu kompilieren versucht, so habe ich musste auch Überschreibung Standard Kompilierung Ausführung, wichtig (und gemeinsam nutzbare) Teil meines Tests Modul pom.xml nun wie folgt aussehen:

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