Как заставить 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>