SonarQube Jacoco JUnit:SonarScanner 遇到许多意想不到的问题

SonarQube Jacoco JUnit : SonarScanner get many unexpected problems

我有一个简单的项目需要 运行 JUnit 测试并让 SonarQube 扫描/运行 使用 SonarScanner 的 JUnit 测试结果。我把我的项目放在 Github here

存在一些问题:

  1. 警告:Class "XXX" 无法通过类加载器声纳访问 ()
  2. 没有 jacoco-it.exec 和 jacoco-ut.exec,只有 运行 jacoco.exec 在 SonarScanner
  3. 运行测试 JUnit 时无法排除某些文件,因为我只想 运行 在我的服务文件夹中测试 (Reference)

这是我的声纳-project.properties :

# Required metadata
sonar.projectKey=com.example:Sample
sonar.projectName=Java :: Example :: SonarQube Scanner
sonar.projectVersion=1.0

# Comma-separated paths to directories with sources (required)
sonar.sources=src
sonar.exclusions=src/main/resources/**
#sonar.test.inclusions=src/main/java/com/example/service/**, src/test/java/**
#sonar.test.exclusions=src/main/java/com/example/controller/**

# Encoding of the source files
sonar.sourceEncoding=UTF-8

#Jacoco
sonar.junit.reportsPath=target/surefire-reports
sonar.jacoco.reportPath =target/jacoco.exec
sonar.jacoco.reportMissing.force.zero=true
sonar.java.binaries=target/classes/**
#sonar.java.libraries=libs/**

当我 运行 Maven 测试直到构建成功时,它会在文件夹 Target.

中创建一些文件和文件夹

之后我 运行 我的 SonarScanner 来扫描我的项目,但我遇到了那些问题。

我的问题:

  1. 如何 运行 我的 SonarQube 扫描仪没有任何警告?
  2. 如何在扫描JUnit结果时正确排除文件?因为我用的是引用设置,而且Coverage还是扫描文件
  3. 如何在 SonarScanner 上创建 jacoco-it.exec 和 jacoco-ut.exec 以及 运行?

我的项目是基于这个Reference

使用SonarQube Scanner for Maven instead of just SonarQube Scanner。否则你会陷入配置的麻烦,你陷入其中,因为需要手动完成所有事情:

  • sonar.sources 很可能是不正确的 - 应该是 src/main/java 并且将由 Scanner for Maven 正确配置,这就是为什么您将不需要的测试文件作为主文件进行分析
  • 以及通常对于基于 Maven 的项目指向 src/test/java
  • sonar.tests
  • sonar.java.libraries 是空的,这就是你得到 Class "XXX" is not accessible through the classloader sonar 的原因 - 可能很难列出 Maven 项目依赖项的所有必需 JAR 文件,而 Scanner for Maven 会做这是自动的,最重要的是会正确地做到这一点
  • sonar.projectKey with Scanner for Maven 将自动设置为 Maven groupId:artifactId
  • sonar.projectNamesonar.version with Scanner for Maven 将分别正确设置为 Maven 项目名称和版本,因此您无需更改版本,当它在 Maven 项目中更改时
  • 其他如 sonar.sourceEncodingsonar.java.binariessonar.java.test.binariessonar.java.test.libraries 也将自动设置带有 Scanner for Maven 的

如果需要,您仍然可以提供其他附加属性

  • 通过命令行,例如 mvn ... sonar:sonar -Dsonar.something=something
  • 或在 SonarQube 中 UI
  • 或直接在 pom.xml
  • properties 部分指定它们

How to create jacoco-it.exec and jacoco-ut.exec and run it on SonarScanner?

通常jacoco-ut.exec指的是单元测试的覆盖率数据,jacoco-it.exec指的是集成测试的覆盖率数据。它们由 jacoco-maven-plugin 创建,在您的 pom.xml 中您配置 jacoco-maven-plugin 以创建 jacoco.exec