1

我们有一个多模块 Maven 项目。我们正在使用jacoco进行代码覆盖率分析。我准备了 pom 文件来运行测试用例并获取代码覆盖率。当我在本地构建项目时,我可以在声纳仪表板上看到代码覆盖率。

将更改推送到 github 并且触发 jenkins 构建后,声纳仪表板上的代码覆盖率不可用。我在 jenkins 构建日志中发现了以下错误:

未收集覆盖信息。也许您忘记在编译的类中包含调试信息?

jenkins 构建成功后如何使代码覆盖可用?

4

1 回答 1

0

您必须确保在编译 Java 或 Groovy 等代码时,调试选项已打开。我使用 Gradle(而不是 Maven)并启用调试选项,我在Gradle中做了类似的事情。您可以将以下代码放在项目的 build.gradle 或顶级 $GRADLE_HOME/init.d/some-global.gradle 文件中(在 allprojects { ... } 部分内)。

   tasks.withType(JavaCompile) {
     options.debug = true
     options.compilerArgs = ["-g"]
   }

   tasks.withType(GroovyCompile) {
        options.debug = true
   }

在 Maven 中做同样的事情(如何打开调试选项,使用 Java 的 -g 和基于 Groovy 的项目的 true )。

在此之后,您需要确保在调用 sonar runner(即 Gradle 中的 sonarRunner 任务)时正确设置了您的 sonar.xx.yyy 变量。

我将这些变量设置为(UT 用于单元测试,IT 用于集成测试)。仅当您将 jacocoagent.jar 附加到运行应用程序的 .war/.ear 文件的 Tomcat/外部 JVM(而不是 Gradle/Maven JVM)时,才会生成 IT 代码覆盖率。

-Dsonar.jacoco.itReportPath=build/jacoco/IT/jacocoIT.exec 
-Dsonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec

您可以在线/文档查看其他 sonar.xx.yy 变量。

在 Maven 中,您可以使用以下命令打开 Java 调试:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <debug>true</debug>
        <debuglevel>lines,vars,source</debuglevel> 
    </configuration>
  </plugin>
于 2015-08-21T17:30:18.827 回答