在多模块 Maven 项目上,Sonar Maven 插件比 Sonar Jenkins 或 Sonar CLI Scanner 发现更多的错误

Sonar Maven plugin finds more bugs than Sonar Jenkins or Sonar CLI Scanner on multi-module Maven project

给定相同的代码和具有相同规则的相同 SonarQube 服务器,我在使用 mvn sonar:sonarsonar-scanner CLI 和声纳扫描时发现的错误和漏洞数量大不相同-project.properties 文件或 Sonar Jenkins 插件。喜欢,两倍多。

我在属性文件和服务器上设置了模块,我可以看到两个扫描器之间的代码行数相同。我可以在一份报告中看到测试,但在另一份报告中看不到,但是测试没有被计入代码行数或任何错误。 Maven 发现 Jenkins 不是的一个例子是 squid:S2160,其中父 class 与子 class.

属于同一模块

我主要担心的是 Maven 发现的额外错误是否合法,特别是考虑到 Sonar 已弃用 "SonarQube analysis with Maven" post-build 操作并且推荐的 Jenkins 扫描器未发现相同的错误查看相同代码时出现问题。哪个扫描器是正确的,如果是 Maven,是否仍然可以在 Jenkins 中使用已弃用的步骤?

我已经用模块匿名化了属性文件,但它看起来像这样:

# Required metadata
sonar.projectKey=groupId:artifactID
sonar.projectName=My Project name
sonar.projectVersion=0.0.4-SNAPSHOT

# Comma-separated paths to directories with sources (required)
sonar.sources=coreModule/src/main/java,appModule/src/main/java
sonar.tests=coreModule/src/test/java,appModule/src/test/java

sonar.modules=core,app

core.sonar.projectBaseDir=coreModule
core.sonar.sources=src/main/java
core.sonar.projectName=My Core Module Name
app.sonar.projectBaseDir=appModule
app.sonar.sources=src/main/java
app.sonar.projectName=My App Module Name

# Language
sonar.language=java
sonar.java.source=8

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

Jenkins 的 SonarQube 扫描器本质上是其他扫描器的包装器,使您可以在 Jenkins 中方便地使用它们。从你剩下的问题来看,我猜你正在使用 Jenkins 中的 SonarQube Scanner 分析 Build Step。

从您发布的属性来看,您似乎没有向 SonarQube Scanner 分析提供字节码。如果你是,就会有一个 sonar.java.binaries 属性。

SonarQube Scanner for Maven 发现更多问题的原因是它会自动为分析提供该值。

如果您能够使用 Maven 的 SonarQube 扫描仪进行分析,您应该这样做。正如您已经发现的那样 "just handles" 为您提供的大部分详细信息。

您在 Jenkins 中完成此操作不是使用 SonarQube Scanner for Maven-specific 构建步骤,而是使用正常的 Maven 构建步骤。如 in the docs 所述,您将首先在“构建环境”部分启用 "Prepare SonarQube Scanner environment"。然后就可以用$SONAR_MAVEN_GOAL -Dsonar.host.url=$SONAR_HOST_URL进行分析了。 (请注意,根据您的项目权限,您可能还需要通过 -Dsonar.login 传递分析令牌。)

为了回答您的问题,Maven 分析发现的 "extra" 个问题是合法的。其他分析找不到它们,因为它们是由针对字节码的规则引发的。