2015-01-06 6 views
34

Ich habe ein Maven-Multi-Modul-Projekt und ich benutze Jacoco-Maven für Code Coverage-Berichte. Einige Klassen sollten nicht gemeldet werden, da sie Spring-Konfiguration sind und ich bin nicht daran interessiert.Maven Jacoco Konfiguration - Klassen/Pakete vom Bericht ausschließen funktioniert nicht

Ich habe die Maven-jacoco Plugin wie folgt erklärt:

<plugin> 
<groupId>org.jacoco</groupId> 
<artifactId>jacoco-maven-plugin</artifactId> 
<version>0.7.2.201409121644</version> 
<configuration> 
    <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> 
    <exclude>some.package.*</exclude> 
    <exclude>**/*Config.*</exclude> 
    <exclude>**/*Dev.*</exclude> 
    <exclude>some/package/SomeClass.java</exclude> 
</configuration> 
<executions> 
    <execution> 
     <goals> 
      <goal>prepare-agent</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>report</id> 
     <phase>prepare-package</phase> 
     <goals> 
      <goal>report</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>post-unit-test</id> 
     <phase>test</phase> 
     <goals> 
      <goal>report</goal> 
     </goals> 
    </execution> 
</executions> 
</plugin> 

Das Problem ist, dass, wenn ich mvn clean verify jacoco noch berichtet Klassen ausführen, die als meine XML-Konfiguration weist darauf hin, ausgeschlossen werden soll. Wie kann ich es richtig konfigurieren?

Antwort

65

Ihre XML ist etwas falsch, Sie Klasse Ausschlüsse innerhalb eines umfasst nicht übergeordnete Feld hinzufügen müssen, damit Ihre obigen Konfiguration wie die folgenden gemäß den sollte Jacoco docs

<configuration> 
    <excludes> 
     <exclude>**/*Config.*</exclude> 
     <exclude>**/*Dev.*</exclude> 
    </excludes> 
</configuration> 

Die Werte der auszuschließen Felder aussehen sollte sein Klassenpfad (keine Namen verpacken) der kompilierten Klassen in Bezug auf das Verzeichnisziel/classes/die Standard-Wildcard-Syntax

* Match zero or more characters 
** Match zero or more directories 
? Match a single character 

Sie auch ein Paket und alle seine Kinder/Subpackages diese Weise ausschließen :

<exclude>some/package/**/*</exclude> 

jede Klasse in some.package sowie Kinder Mit diesem Ausschluss. Zum Beispiel würde some.package.child auch nicht in den Berichten enthalten sein.

Ich habe getestet und mein Bericht Ziel berichtet über eine reduzierte Anzahl von Klassen mit dem oben genannten.

Wenn Sie dann diesen Bericht in Sonar schieben, werden Sie dann brauchen Sonar zu sagen, diese Klassen in der Anzeige auszuschließen, die in der Sonar getan werden kann, Einstellungen

Einstellungen> Allgemeine Einstellungen> Ausschlüsse> Code Coverage

Sonar Docs erklärt es ein bisschen mehr

Ihr Kommando über

Lauf
mvn clean verify 

Werden die Klassen zeigen, haben

Keine Ausschlüsse

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** --- 
[INFO] Analyzed bundle '**' with 37 classes 

Mit Ausschlüsse

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** --- 
[INFO] Analyzed bundle '**' with 34 classes 

this helps

+2

Ich musste das Jacoco-Plugin von Version 0.7.5 auf 0.7.6 aktualisieren, um den Ausschluss zu berücksichtigen. – Stephane

+0

Übrigens. Sie haben eine Idee, meine Tests im jacoco-it-Ordner anzuzeigen? http://stackoverflow.com/questions/37485133/have-integration-tests-in-jacoco-it-directory – Stephane

+0

Ich frage mich, wie man nicht Quellcode-Klassen, sondern Test-Klassen ausschließen. – Stephane

2

https://github.com/jacoco/jacoco/issues/34

Dies sind die verschiedenen Bezeichnungen für die Klassen ausgeschlossen wir haben:

  • VM Name: java/util/Karte $ Eintrag
  • Java Name: java.util.Map $ Eintrag Datei
  • Name: java/util/Karte $ Eintrag.Klasse

Agent-Parameter, Ant-Tasks und Maven prepare-Agent Ziel

  • umfasst: Java-Name (VM-Name funktioniert auch)
  • umfasst nicht: Java-Name (VM-Name funktioniert auch)
  • exclclassloader: Java-Name

erlauben Diese Spezifikationen Platzhalter * und, wobei * ein Platzhalter? ny Anzahl der Zeichen, sogar mehrere verschachtelte Ordner.

Maven Bericht Ziel

  • beinhaltet: Dateiname
  • umfasst nicht:? Dateiname

Diese Spezifikationen ermöglichen Ant Filespec wie Platzhalter *, ** und gegebenen * Platzhalter Teile nur eines einzelnen Pfadelements.

1

Obwohl Andrew bereits beantwortet Frage mit Details, i Code geben werde, wie es

  <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <version>0.7.9</version> 
       <configuration> 
        <excludes> 
         <exclude>**/*com/test/vaquar/khan/HealthChecker.class</exclude> 
        </excludes> 
       </configuration> 
       <executions> 
        <!-- prepare agent for measuring integration tests --> 
        <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> 
1

Eine andere Lösung in pom auszuschließen:

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>0.7.5.201505241946</version> 
    <executions> 
     <execution> 
      <id>default-prepare-agent</id> 
      <goals> 
       <goal>prepare-agent</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>default-report</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>report</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>default-check</id> 
      <goals> 
       <goal>check</goal> 
      </goals> 
      <configuration> 
       <rules> 
        <rule implementation="org.jacoco.maven.RuleConfiguration"> 
         <excludes> 
          <exclude>com.mypackage1</exclude 
          <exclude>com.mypackage2</exclude> 
         </excludes> 
         <element>PACKAGE</element> 
         <limits> 
          <limit implementation="org.jacoco.report.check.Limit"> 
           <counter>COMPLEXITY</counter> 
           <value>COVEREDRATIO</value> 
           <minimum>0.85</minimum> 
          </limit> 
         </limits> 
        </rule> 
       </rules> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Bitte beachten Sie, dass, verwenden wir "<element>PACKAGE</element>" in der Konfiguration Das hilft uns dann, auf Paketebene auszuschließen.