Wie lässt man Sonar einige Klassen für die CodeCoverage-Metrik ignorieren?

Lesezeit: 8 Minuten

Benutzer-Avatar
Dmitrij Borowoi

Ich habe ein Sonar-Profil in Maven. Alles funktioniert gut, außer der Codeabdeckungsmetrik. Ich möchte, dass Sonar einige Klassen nur für die Codeabdeckungsmetrik ignoriert. Ich habe folgendes Profil:

<profile>
    <id>sonar</id>
    <properties>
        <sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <excludes>
                        <exclude>**/*Suite*.java</exclude>
                        <exclude>**/*RemoteTest.java</exclude>
                        <exclude>**/*SpringTest.java</exclude>
                        <exclude>**/*CamelTest.java</exclude>
                        <exclude>**/*FunctionalTest.java</exclude>
                        <exclude>**/*IntegrationTest.java</exclude>
                        <exclude>**/*DaoBeanTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>                    
        </plugins>
    </build>
</profile>

Bitte helfen Sie. Ich habe versucht, etwas hinzuzufügen wie

<exclude>com/qwerty/dw/publisher/Main.class</exclude>

aber es half nichts

AKTUALISIEREN

Ich habe ein korrektes Cobertura-Profil. Ich habe versucht, es dem Sonar-Profil hinzuzufügen, aber ich habe immer noch 53 % statt etwa 95 % wie im Cobertura-Profil

<profile>
    <id>sonar</id>
    <properties>
        <sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
        <sonar.core.codeCoveragePlugin>cobertura</sonar.core.codeCoveragePlugin>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <excludes>
                        <exclude>**/*Suite*.java</exclude>
                        <exclude>**/*RemoteTest.java</exclude>
                        <exclude>**/*SpringTest.java</exclude>
                        <exclude>**/*CamelTest.java</exclude>
                        <exclude>**/*FunctionalTest.java</exclude>
                        <exclude>**/*IntegrationTest.java</exclude>
                        <exclude>**/*DaoBeanTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>${cobertura.maven.plugin.version}</version>
                <configuration>
                    <instrumentation>
                        <excludes>
                            <exclude>com/qwerty/dw/dao/*</exclude>
                            <exclude>com/qwerty/dw/domain/*</exclude>
                            <exclude>com/qwerty/dw/beans/**/*</exclude>
                            <exclude>com/qwerty/dw/daemon/exception/*</exclude>
                            <exclude>com/qwerty/dw/daemon/Main.class</exclude>
                            <exclude>com/qwerty/dw/sink/Main.class</exclude>
                            <exclude>com/qwerty/dw/publisher/Main.class</exclude>
                            <exclude>com/qwerty/dw/publisher/dao/*</exclude>
                            <exclude>com/qwerty/dw/publisher/domain/*</exclude>
                        </excludes>
                    </instrumentation>
                    <formats>
                        <format>html</format>
                    </formats>
                    <aggregate>true</aggregate>
                    <check>
                        <haltOnFailure>true</haltOnFailure>
                        <branchRate>60</branchRate>
                        <lineRate>60</lineRate>
                        <totalBranchRate>60</totalBranchRate>
                        <totalLineRate>60</totalLineRate>
                    </check>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>clean</goal>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

  • Wahrscheinlich ein ungelöstes Problem? jira.codehaus.org/browse/SONAR-766

    – Jayan

    27. August 2012 um 3:37 Uhr

  • Siehe auch jacoco Gradle-Lösung: stackoverflow.com/a/43196918/907576

    – Radistao

    15. Juni 2018 um 12:50 Uhr

Benutzer-Avatar
Barfuin

Zum Zeitpunkt des Schreibens dieses Artikels (mit SonarQube 4.5.1) lautet die richtige festzulegende Eigenschaft sonar.coverage.exclusionsz.B:

<properties>
    <sonar.coverage.exclusions>foo/**/*,**/bar/*</sonar.coverage.exclusions>
</properties>

Dies scheint eine Änderung von nur ein paar Versionen früher zu sein. Beachten Sie, dass dies die angegebenen Klassen nur von der Deckungsberechnung ausschließt. Alle anderen Metriken und Probleme werden berechnet.

Um den Eigenschaftsnamen für Ihre Version von SonarQube zu finden, können Sie versuchen, zu gehen Allgemeine Einstellungen Abschnitt Ihrer SonarQube-Instanz und suchen Sie nach der Codeabdeckung item (in SonarQube 4.5.x, das ist Allgemeine Einstellungen → Ausschlüsse → Codeabdeckung). Unterhalb des Eingabefeldes gibt es den oben erwähnten Eigenschaftsnamen (“Key: sonar.coverage.exclusions”).

  • Für Gradle ist es sonarRunner { sonarProperties { property “sonar.coverage.exclusions”, ” ‘/Domain/‘ , ‘/Fassade/‘ , ‘/Stummel/‘ , ‘/Modell/‘ , ‘/config/‘ ” Eigenschaft “sonar.exclusions”, “/Stummel/” } }

    – Shane Lee

    23. April 2015 um 4:06 Uhr

  • @MichaelTecourt – Es ist hier Ausschlüsse und Einschlüsse der SonarQube-Analyse Auszug aus der Dokumentation: sonar.coverage.exclusions – Kommagetrennte Liste von Dateipfadmustern, die von Abdeckungsberechnungen ausgeschlossen werden sollen

    – Venkat

    3. Februar 2017 um 7:27 Uhr


  • Die richtige Syntax, um das foo-Paket vollständig zu ignorieren, lautet: **/foo/**/*

    – Heizer

    28. Februar 2018 um 16:41 Uhr

  • @Andrew Roth Der Kommentar, den ich hinzugefügt habe, ist jetzt 2 Jahre alt und Sonar hat bis dahin viele Änderungen erfahren 🙂 Der jetzt zu verwendende Parameter ist sonar.exclusions. Referenz aus der neuen Dokumentation: docs.sonarqube.org/latest/project-administration/…

    – Venkat

    12. März 2019 um 2:02 Uhr

  • Nein, das ist nicht richtig. sonar.exclusions schließt die genannten Dateien oder Verzeichnisse von der Analyse aus. sonar.coverage.exclusions existiert noch und schließt die erwähnten Dateien oder Verzeichnisse von der Codeabdeckung aus, wie in der Frage gestellt. Aber es wird in der aktuellen Dokumentation nicht erwähnt. Ich verwende SonarQube 8.1 und konnte den Konfigurationsschlüssel sehen sonar.coverage.exclusions unter Administration > Analysis Scope

    – ChW

    18. Februar 2020 um 20:53 Uhr

Benutzer-Avatar
rogerpack

Für mich hat das funktioniert (im Grunde pom.xml Ebene globale Eigenschaften):

<properties>
    <sonar.exclusions>**/Name*.java</sonar.exclusions>
</properties>

Entsprechend: http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns

Es scheint, dass Sie es entweder mit “.java” oder möglicherweise “*” beenden können.

um die Java-Klassen zu erhalten, an denen Sie interessiert sind.

  • Ich habe mir das auch angesehen, aber das schließt die Dateien von jeder Metrik (dokumentierte API, Regelkonformität, …) und nicht nur von der Testabdeckung aus.

    – g00glen00b

    11. Juni 2014 um 9:39 Uhr

  • Ja, das wollten wir in unserem Fall. Möglicherweise können Sie es andernfalls zu Ausschlüssen wie pmd/findbugs oder jacoco hinzufügen [?]

    – Rogerpack

    28. Mai 2015 um 15:19 Uhr

  • Das ist vielleicht das, was Sie wollten, aber die Frage bezog sich ausdrücklich auf die Abdeckung: „Ich möchte, dass Sonar einige Klassen ignoriert nur für die Codeabdeckungsmetrik”

    – Lonzak

    21. Juni 2017 um 11:18 Uhr


Benutzer-Avatar
Metatron

Laut Dies Dokument für SonarQube 7.1

Sonarausschlüsse – Kommagetrennte Liste von Dateipfadmustern, die von der Analyse ausgeschlossen werden sollen
Sonarabdeckung.Ausschlüsse – Kommagetrennte Liste von Dateipfadmustern, von denen ausgeschlossen werden soll Abdeckung
Berechnungen

Dies dokumentieren gibt einige Beispiele zum Erstellen von Pfadmustern

# Exclude all classes ending by "Bean"
# Matches org/sonar.api/MyBean.java, org/sonar/util/MyOtherBean.java, org/sonar/util/MyDTO.java, etc.
sonar.exclusions=**/*Bean.java,**/*DTO.java

# Exclude all classes in the "src/main/java/org/sonar" directory
# Matches src/main/java/org/sonar/MyClass.java, src/main/java/org/sonar/MyOtherClass.java
# But does not match src/main/java/org/sonar/util/MyClassUtil.java
sonar.exclusions=src/main/java/org/sonar/*

# Exclude all COBOL programs in the "bank" directory and its sub-directories
# Matches bank/ZTR00021.cbl, bank/data/CBR00354.cbl, bank/data/REM012345.cob
sonar.exclusions=bank/**/*

# Exclude all COBOL programs in the "bank" directory and its sub-directories whose extension is .cbl
# Matches bank/ZTR00021.cbl, bank/data/CBR00354.cbl
sonar.exclusions=bank/**/*.cbl

Wenn Sie Maven für Ihr Projekt verwenden, können Maven-Befehlszeilenparameter beispielsweise so übergeben werden -Dsonar.coverage.exclusions=**/config/*,**/model/*

Ich hatte ein Problem damit, einzelne Klassen explizit auszuschließen. Nachfolgend meine Beobachtungen:

**/*GlobalExceptionhandler.java - not working for some reason, I was expecting such syntax should work
com/some/package/name/GlobalExceptionhandler.java - not working
src/main/java/com/some/package/name/GlobalExceptionhandler.java - good, class excluded explicitly without using wildcards

Wenn Sie Sonar-Scanner für Swift verwenden, verwenden Sie sonar.coverage.exclusions in Ihren sonar-project.properties, um jede Datei nur für die Codeabdeckung auszuschließen. Wenn Sie auch Dateien von der Analyse ausschließen möchten, können Sie sonar.exclusions verwenden. Das hat bei mir auf Anhieb funktioniert

sonar.coverage.exclusions=**/*ViewController.swift,**/*Cell.swift,**/*View.swift

Für jacoco: Verwenden Sie diese Eigenschaften:

-Dsonar.jacoco.excludes=**/*View.java

  • sonar.jacoco.excludes wird nicht mehr unterstützt (ab SonarQube 4.5.1). Siehe hier für die “neue” Konfiguration.

    – Barfuin

    25. November 2014 um 18:11 Uhr


Benutzer-Avatar
Gemeinschaft

Ich denke, Sie suchen nach der in dieser Antwort beschriebenen Lösung Methoden von der Codeabdeckung mit Cobertura ausschließen Denken Sie daran, dass Sie bei Verwendung von Sonar 3.2 angeben müssen, dass Ihr Abdeckungstool cobertura und nicht jacoco (Standard) ist, was nicht der Fall ist. Diese Art von Funktion wird noch nicht unterstützt

  • sonar.jacoco.excludes wird nicht mehr unterstützt (ab SonarQube 4.5.1). Siehe hier für die “neue” Konfiguration.

    – Barfuin

    25. November 2014 um 18:11 Uhr


Manchmal ist Clover so konfiguriert, dass Codeabdeckungsberichte für den gesamten Nicht-Testcode bereitgestellt werden. Wenn Sie diese Einstellungen überschreiben möchten, können Sie Konfigurationselemente verwenden, um Quelldateien von der Instrumentierung auszuschließen oder einzuschließen:

<plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-clover2-plugin</artifactId>
    <version>${clover-version}</version>
    <configuration> 
        <excludes> 
            <exclude>**/*Dull.java</exclude> 
        </excludes> 
    </configuration>
</plugin>

Außerdem können Sie die folgende Sonarkonfiguration einbeziehen:

<properties>
    <sonar.exclusions>
        **/domain/*.java,
        **/transfer/*.java
    </sonar.exclusions>
</properties> 

1187310cookie-checkWie lässt man Sonar einige Klassen für die CodeCoverage-Metrik ignorieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy