Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make Sonar ignore some classes for codeCoverage metric?

I have a Sonar profile in Maven. Everything works fine except the code coverage metric. I want to make Sonar ignore some classes only for the code coverage metric. I have the following profile:

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

Please help. I tried to add something like

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

but it didn't help

UPDATE

I have a correct Cobertura profile. I tried to add it to the Sonar profile, but still I have 53% instead about 95% like in the Cobertura profile

<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> 
like image 245
Dmitrii Borovoi Avatar asked Aug 27 '12 03:08

Dmitrii Borovoi


2 Answers

At the time of this writing (which is with SonarQube 4.5.1), the correct property to set is sonar.coverage.exclusions, e.g.:

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

This seems to be a change from just a few versions earlier. Note that this excludes the given classes from coverage calculation only. All other metrics and issues are calculated.

In order to find the property name for your version of SonarQube, you can try going to the General Settings section of your SonarQube instance and look for the Code Coverage item (in SonarQube 4.5.x, that's General Settings → Exclusions → Code Coverage). Below the input field, it gives the property name mentioned above ("Key: sonar.coverage.exclusions").

like image 193
barfuin Avatar answered Sep 20 '22 18:09

barfuin


For me this worked (basically pom.xml level global properties):

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

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

It appears you can either end it with ".java" or possibly "*"

to get the java classes you're interested in.

like image 22
rogerdpack Avatar answered Sep 20 '22 18:09

rogerdpack