2012-08-27 7 views
16

Ho un profilo Sonar in Maven. Tutto funziona bene tranne la metrica di copertura del codice. Voglio far sì che Sonar ignori alcune classi solo per la metrica di copertura del codice. Ho il seguente profilo:Come far sì che Sonar ignori alcune classi per la metrica codeCoverage?

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

prega di aiuto. Ho cercato di aggiungere qualcosa di simile

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

ma non ha aiutato

UPDATE

Ho un profilo Cobertura corretta. Ho provato ad aggiungerlo al profilo di Sonar, ma ancora non ho il 53% anziché il 95% come nel profilo 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> 
+0

Probabilmente un problema irrisolto? http://jira.codehaus.org/browse/SONAR-766 – Jayan

risposta

1

penso che si 're cercando la soluzione descritta in questa risposta Exclude methods from code coverage with Cobertura Tenete a mente che se stai usando Sonar 3.2 hai specificato che lo strumento di copertura è cobertura e non jacoco (predefinito), che non supporta questo tipo di funzionalità ancora

+0

Riformulare la domanda.Come riutilizzare i report generati da cobertura –

1

A volte, Clover è configurato per fornire report di copertura del codice per tutti codice non test. Se si desidera modificare queste preferenze, è possibile utilizzare elementi di configurazione per escludere e includere i file di origine di essere strumentato:

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

Inoltre, è possibile includere la seguente configurazione Sonar:

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

Per noi questo lavorato (fondamentalmente proprietà di livello pom.xml):

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

Secondo http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns risulta sarà possibile terminare con ".java" o forse " *" Per ottenere le classi Java che ti interessa

+2

Anche io stavo osservando questo, ma questo esclude i file da ogni metrica (API documentata, conformità alle regole, ...) e non solo la copertura del test. – g00glen00b

+0

Sì, questo è quello che volevamo nel nostro caso. Potresti essere in grado di aggiungerlo a pmd/findbugs o esclusioni jacoco elsewise [?] – rogerdpack

+1

Questo potrebbe essere ciò che volevi, ma la domanda era esplicitamente sulla copertura: "Voglio far sì che Sonar ignori alcune classi ** solo ** per il metrica di copertura del codice " – Lonzak

3

Per jacoco:. Utilizzare questa proprietà:

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

" sonar.jacoco.excludes' non è più supportata (a partire da SonarQube 4.5.1). Vedi [qui] (http://stackoverflow.com/a/27133765/1005481) per la "nuova" configurazione. –

27

Al momento della stesura di questo (che è con SonarQube 4.5.1), la proprietà corretta per impostare è sonar.coverage.exclusions, ad esempio:

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

Questo sembra essere un cambiamento da poche versioni precedenti. Si noti che questo esclude solo le classi date dal calcolo della copertura. Vengono calcolati tutti gli altri parametri e metriche.

Al fine di trovare il nome della proprietà per la versione di SonarQube, si può provare ad andare alla sezione Impostazioni generali dell'istanza SonarQube e cercare il Code Coverage voce (in SonarQube 4.5.x, che è Impostazioni generali → Esclusioni Copertura del codice). Sotto il campo di inserimento, fornisce il nome della proprietà sopra menzionato ("Chiave: sonar.coverage.exclusions").

+0

Per gradle è sonarRunner { sonarProperties { proprietà "sonar.coverage.exclusions", "'**/domain/**', '**/facade/**', '**/stub/**' , "**/model/**", "**/config/**" " proprietà" sonar.exclusions "," **/stub/** " } } –

+0

@Thomas Ma sembra che questo faccia non forcella per i test di integrazione. –

+1

Non riesco a trovare 'sonar.coverage.exclusions' ovunque nei documenti, solo 'sonar.exclusions' è menzionato. –

Problemi correlati