【问题标题】:Sonar Maven plugin finds more bugs than Sonar Jenkins or Sonar CLI Scanner on multi-module Maven projectSonar Maven 插件在多模块 Maven 项目中发现比 Sonar Jenkins 或 Sonar CLI Scanner 更多的错误
【发布时间】:2017-09-24 02:31:08
【问题描述】:

鉴于相同的代码和具有相同规则的相同 SonarQube 服务器,我在使用 mvn sonar:sonarsonar-scanner CLI 和 sonar-project.properties 文件或 Sonar Jenkins 进行扫描时发现的错误和漏洞数量大不相同插入。像,超过两倍。

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

我主要关心的是 Maven 发现的其他错误是否合法,特别是考虑到 Sonar 已弃用“使用 Maven 进行 SonarQube 分析”后构建操作,并且推荐的 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

【问题讨论】:

  • 我对包装器的了解也差不多。如果我在 mvn clean 之后或之前运行扫描仪,它似乎没有任何改变,它在目标文件夹中,但有没有特殊的配置方法?我让 Jenkins 设置为在构建结束时运行“SonarQube Scanner”。我可以根据需要在本地运行命令行扫描程序获得相同的结果。

标签: java maven jenkins sonarqube sonarqube-scan


【解决方案1】:

适用于 Jenkins 的 SonarQube 扫描仪本质上是其他扫描仪的包装器,可让您在 Jenkins 中方便地使用它们。从您的其余问题中,我猜您正在使用 Jenkins 中的 SonarQube 扫描仪分析构建步骤。

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

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

如果您能够使用 SonarQube Scanner for Maven 进行分析,那么您应该这样做。正如您已经发现的那样,它“只为您处理”大部分细节。

您可以在 Jenkins 中完成此操作,而不是使用 SonarQube Scanner for Maven 特定的构建步骤,而是使用普通的 Maven 构建步骤。如in the docs 所述,您将首先在构建环境部分启用“准备 SonarQube 扫描仪环境”。然后您可以使用$SONAR_MAVEN_GOAL -Dsonar.host.url=$SONAR_HOST_URL 进行分析。 (请注意,您可能还需要通过-Dsonar.login 传递分析令牌,具体取决于您的项目权限。)

为了回答您的问题,Maven 分析发现的“额外”问题是合法的。其他分析没有发现它们,因为它们是由针对字节码的规则提出的。

【讨论】:

  • 谢谢。通过从 Maven 中调试生成的类路径并将其写入 .properties 文件,我能够完全缩小差距,而使结果映射完全无法维护。
猜你喜欢
  • 2015-12-30
  • 2016-09-29
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 2016-02-21
  • 2012-11-16
相关资源
最近更新 更多