sonarqube9配置修改
Java
2024-02-26 3720字

sonarqube9配置修改

官方参考文档:sonar文档 jacoco文档

项目基础环境:maven jdk8

操作目标:

  1. 推送sonar并在sonar上能查看到结果

  2. 能看到代码问题,单元测试覆盖率等具体指标

操作步骤:

​ 参考官方文档执行操作(multi-module Maven project):

  1. 对于多模块 Maven 项目,您可以在父 pom 中配置 jacoco-maven-plugin 配置文件,就像在上面的单个模块案例中一样。默认情况下,将为每个模块生成单独的覆盖率报告。

  2. 如果要将所有特定于模块的报告聚合到一个项目级报告中,最简单的解决方案是创建一个特殊的 Maven 模块(与您已有的模块一起),该模块除了使用 report-aggregate 目标之外 pom.xml 什么都不包含。下面是一个示例:

    <project>
      <artifactId>my-project-report-aggregate</artifactId>
      <name>My Project</name>
      <description>Aggregate Coverage Report</description>
      <dependencies>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>my-module-1</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>my-module-2</artifactId>
          <version>${project.version}</version>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>report-aggregate</id>
                <phase>verify</phase>
                <goals>
                  <goal>report-aggregate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    
  3. maven clean verify 在该目录中调用时,将生成聚合报告并将其放置在 report-aggregate-module 该目录中的标准位置 target/site/jacoco-aggregate/jacoco.xml 。然后,在顶层 pom.xml 中,您设置 sonar.coverage.jacoco.xmlReportPaths 到此位置:

```
<properties>/
  <sonar.coverage.jacoco.xmlReportPaths>
    ${project.basedir}/report-aggregate/target/site/
      jacoco-aggregate/jacoco.xml
  </sonar.coverage.jacoco.xmlReportPaths>
</properties>
```

支持**通配符和逗号分隔的路径**列表。有关详细信息,请参阅测试覆盖率参数。

​ 执行文档操作后出现问题:

1. sonar能推送上去,没有单元测试覆盖率

​ 问题处理:

  1. 查看到该父级目录也就是sonar.coverage.jacoco.xmlReportPaths下的xml生成大小为1kb,但是很多模块下的jacoco.xml都为十几或者上百kb,怀疑是报告聚合的问题。

  2. 搜索到jacoco:report-aggregate,了解到有些特性0.8.7版本后的才支持于是升级到0.8.11,进行打包尝试,参考如下

    <formats>	List	0.8.7	A list of report formats to generate. Supported formats are HTML, XML and CSV. Defaults to all formats if no values are given.
    Default value is : HTML,XML,CSV .
    <includeCurrentProject>	boolean	0.8.9	Include this project in the report. If true then this projects class and source files as well as JaCoCo execution data files will be collected.
    

    ps:打包发布这里花了不少时间,因为是在父模块修改,大多模块都会依赖父模块,所以都需要重新打包发布

  3. 再次执行后发现父模块下的jacoco.xml还是1kb,开始查看各个模块下的jacoco.xml的大小以及依赖关系,发现依赖只有两级的情况下jacoco.xml正常生成,比如一个父模块下面只有平铺的子模块依赖,这样的模块会聚合生成一个xml,如果下面还含其他父模块,那么jacoco.xml就不会生成。

    ps: 找到该问题后,后面进行了很多次尝试,比如是不是需要把jacoco的配置写在jar包生成的模块等。最后不依赖官方提供的实例,阅读官方文档,按照项目以前的配置设置,尽量最小修改。

​ 靠谱操作:

  1. 在以前的sonar版本生成的jacoco.exec文件时,我们并没有指定生成报告依赖的文件,但是sonar会扫描到所有的exec并集成。于是再去查看官方文档,发现指定文件这个配置支持通配符于是进行配置,扫描所有模块下的jacoco.xml

    <properties>
            <sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/**/target/site/jacoco/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
        </properties>
    
  2. 这里我们就不需要聚合报告report-aggregate了,于是只需要修改以前jacoco配置,产生xml报告即可

    <plugin> 
              <groupId>org.jacoco</groupId>  
              <artifactId>jacoco-maven-plugin</artifactId>  
              <version>0.8.5</version>  
              <executions> 
                <execution> 
                  <id>pre-test</id>  
                  <goals> 
                    <goal>prepare-agent</goal> 
                  </goals> 
                </execution>
                <!--增加xml报告配置-->
                <execution>
                  <id>report</id>
                  <goals>
                    <goal>report</goal>
                  </goals>
                </execution>
              </executions> 
            </plugin>
    

    ps:目前来看已经很简单了,只需要修改两个文件两个位置。能不能够更简单,因为以前的jacoco.exec的报告整合可没有sonar.coverage.jacoco.xmlReportPaths这个配置,于是删除这个配置推送发现,代码覆盖率正常,发现sonar扫描会读取默认配置的xml。所以新sonar版本升级只需要在以前pom配置上增加6行配置即可。

    			<execution>
                  <id>report</id>
                  <goals>
                    <goal>report</goal>
                  </goals>
                </execution>
    

​ from: Yimacro 关注:公众号