0

我想从 cobertura 迁移到 jacoco 代码覆盖工具。我使用 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 installjacoco 之后,我会生成一些带有代码覆盖率的漂亮 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>

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

结果,我在服务器上得到了这样的代码覆盖率

在此处输入图像描述

而且我看到在服务器上生成的覆盖率报告中,我看到我的排除包包含在报告中。当我使用 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>在此处输入图像描述

4

2 回答 2

0

排除不需要发生在 JaCoCo 端,而是发生在 SonarQube 端,并通过 SonarQube UI 而不是在您的 POM 中指定。

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

于 2016-05-25T11:47:36.207 回答
0

将要排除的包放入 maven<properties>块中pom.xml

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

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

于 2019-01-12T14:51:15.077 回答