Sonar Maven插件在多模块Maven项目中找到比Sonar Jenkins或Sonar CLI Scanner更多的错误

时间:2017-04-26 15:24:52

标签: java maven jenkins sonarqube sonarqube-scan

鉴于相同的代码和具有相同规则的相同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

1 个答案:

答案 0 :(得分:1)

Jenkins的SonarQube扫描仪基本上是其他扫描仪的包装器,可以在Jenkins中方便地使用它们。在您提出的其他问题中,我猜您正在使用Jenkins的SonarQube扫描仪分析构建步骤。

根据您发布的属性,您似乎无法向SonarQube扫描仪分析提供字节代码。如果是的话,会有一个sonar.java.binaries属性。

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

如果您能够使用SonarQube Scanner for Maven进行分析,那么您应该这样做。正如您已经发现它"只是处理"大多数细节都适合你。

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

要回答你的问题,"额外" Maven分析发现的问题是合法的。其他分析找不到它们,因为它们是由反对字节代码的规则引发的。