与jacoco集成声纳。我在声纳覆盖率报告中看到了排除的包裹

时间:2016-05-25 07:26:53

标签: java maven sonarqube sonarqube-scan jacoco-maven-plugin

我想从cobertura迁移到jacoco codecoverage工具。 我正在使用maven作为构建工具,我在我的pom.xml文件中添加了jococo-maven-plugin。它的配置如下所示:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.2.201409121644</version>
    <configuration>
        <append>true</append>
        <outputEncoding>UTF-8</outputEncoding>
        <destFile>${sonar.jacoco.reportPath}</destFile>
        <dataFile>${sonar.jacoco.reportPath}</dataFile>
        <outputDirectory>${jacoco.output.path}</outputDirectory>
        <excludes>
            <exclude>com/acmecorp/acmeproject/mbean/**/*.class</exclude>
            <exclude>com/acmecorp/acmeproject/model/**/*.class</exclude>
        </excludes>
    </configuration>
    <executions>
        <execution>
            <id>agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>jacoco-site</id>
            <phase>package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

因此,在执行mvn clean install之后,jacoco会为我生成一些代码覆盖率相当高的html页面。这份文件看起来就像我希望它看起来一样。

我需要执行的第二步是将jococo与声纳集成。以前我将声纳与cobertura集成。因此,我只是删除了cobertura特定属性并添加了与jococo相关的属性。

<properties>
    <!--<sonar.cobertura.reportPath>target/site/cobertura/coverage.xml</sonar.cobertura.reportPath>-->
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.projectKey>${project.artifactId}</sonar.projectKey>
    <sonar.projectName>ACME Project</sonar.projectName>
    <sonar.projectVersion>${project.version}</sonar.projectVersion>
    <sonar.java.source>${java.compliance.level}</sonar.java.source>
    <sonar.sources>src/main/java</sonar.sources>
    <sonar.jdbc.url>jdbc:mysql://4.4.8.8:3306/sonar?useUnicode=true&amp;characterEncoding=utf8&amp;rewriteBatchedStatements=true&amp;useConfigs=maxPerformance</sonar.jdbc.url>
    <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
    <sonar.jdbc.username>ranos</sonar.jdbc.username>
    <sonar.jdbc.password>ranos</sonar.jdbc.password>
    <sonar.host.url>http://4.4.8.8:9000/sonar/</sonar.host.url>
    <sonar.jacoco.reportPath>target/sites/jacoco/jacoco.exec</sonar.jacoco.reportPath>
    <jacoco.output.path>target/sites/jacoco/</jacoco.output.path>
</properties>

Maven插件

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.0.1</version>
</plugin>

和个人资料

<profiles>
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

因此,我在服务器上获得了这样的代码覆盖率:

As a result I get such code coverage on server

enter image description here

我看到在服务器上生成的覆盖率报告中,我看到我的排除包已包含在报告中。当我使用cobertura时,一切正常。

所以可能有人可以帮助我。我不想为声纳配置添加排除项。我真的希望它可以是jococo插件的一些额外配置。

更新

如果我使用cobertura maven-plugin和声纳 (我的意思是,如果我对此行<sonar.jacoco.reportPath>target/sites/jacoco/jacoco.exec</sonar.jacoco.reportPath>发表评论并取消评论此行<sonar.cobertura.reportPath>target/site/cobertura/coverage.xml</sonar.cobertura.reportPath>enter image description here

2 个答案:

答案 0 :(得分:0)

排除不需要在JaCoCo方面,而是在SonarQube方面,并通过SonarQube UI指定,而不是在POM中指定。

文档会为您提供详细信息:http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-IgnoreCodeCoverage

答案 1 :(得分:0)

将要排除的软件包放在<properties>的maven pom.xml块中:

<properties>
  <sonar.jacoco.excludes>*model*,*generated*,*exception*</sonar.jacoco.excludes>
</properties>

如果这不起作用,请尝试将属性名称更改为sonar.coverage.exclusions,我认为它在更高版本中已更改。