Как заставить Sonar игнорировать некоторые классы для метрики codeCoverage?

У меня есть профиль сонара в Maven. Все работает отлично, за исключением показателя покрытия кода. Я хочу, чтобы Sonar игнорировал некоторые классы только для показателя покрытия кода. У меня есть следующий профиль:

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

Пожалуйста, помогите. Я попытался добавить что-то вроде

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

но это не помогло

UPDATE

У меня есть правильный профиль Cobertura. Я попытался добавить его в профиль Sonar, но все же у меня есть 53% вместо примерно 95%, как в профиле Cobertura

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

Ответ 1

Во время написания (с помощью SonarQube 4.5.1) правильное свойство для установки - sonar.coverage.exclusions, например:

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

Кажется, это изменение от нескольких версий ранее. Обратите внимание, что это исключает данные классы только из расчета покрытия. Рассчитываются все другие показатели и проблемы.

Чтобы найти имя свойства для вашей версии SonarQube, вы можете попробовать перейти в раздел "Общие настройки" вашего экземпляра SonarQube и найти элемент Code Coverage (в SonarQube 4.5.x, этот General Settings → Exclusions & rarr, Покрытие кода). Ниже поля ввода указано имя свойства, упомянутое выше ( "Key: sonar.coverage.exclusions" ).

Ответ 2

Для нас это сработало (в основном, свойства уровня pom.xml):

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

Согласно http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns, вы можете либо закончить его с помощью ".java", либо, возможно, "*", чтобы получить классы java вас интересует.

Ответ 3

Для jacoco: используйте следующие свойства:

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

Ответ 4

Я думаю, что вы ищете решение, описанное в этом ответе Исключить методы из покрытия кода с помощью Cobertura Имейте в виду, что если вы используете Sonar 3.2, вы указываете, что ваш инструмент покрытия является cobertura, а не jacoco (по умолчанию), который еще не поддерживает эту функцию

Ответ 5

Иногда Clover настроен для предоставления отчетов о покрытии кода для всего не-тестового кода. Если вы хотите переопределить эти настройки, вы можете использовать элементы конфигурации для исключения и включения исходных файлов из инструментов:

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

Кроме того, вы можете включить следующую конфигурацию Sonar:

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