2017-04-26 756 views
0

由于具有相同规则的相同代码和相同的SonarQube服务器,我使用mvn sonar:sonar进行扫描时发现了大量不同数量的错误和漏洞, sonar-scanner CLI和sonar-project.properties文件或Sonar Jenkins插件。比如,超过两倍。Sonar Maven插件在多模块Maven项目中发现比Sonar Jenkins或Sonar CLI扫描器更多的错误

我有属性文件和服务器上的模块设置,我可以看到两行扫描程序的代码行数相同。我可以在一个报告中看到测试,但在另一个报告中看不到测试,但测试不会计入代码行或任何错误。 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 
+0

我认为这个包装很多。它似乎没有改变任何东西,如果我在mvn clean或之前运行扫描仪,它在目标文件夹中,但有没有一种特殊的方式来配置它? Jenkins设置为在构建结束时运行“SonarQube扫描仪”。我可以根据需要在本地运行命令行扫描程序,获得相同的结果。 – Sloloem

回答

1

的SonarQube扫描仪詹金斯基本上是围绕其他扫描仪的包装,使它们提供给您方便地在詹金斯。从您的其余问题中,我会猜测您正在Jenkins中使用SonarQube扫描仪分析构建步骤。

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

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

如果你是能够与SonarQube扫描仪分析Maven,你应该。正如你已经发现它“只处理”你的大部分细节。

您在Jenkins中完成此任务,而不是使用SonarQube扫描程序进行Maven特定的构建步骤,但使用正常的Maven构建步骤。正如in the docs所述,您将首先在“构建环境”部分中启用“准备SonarQube扫描仪环境”。然后你可以用$SONAR_MAVEN_GOAL -Dsonar.host.url=$SONAR_HOST_URL来分析。 (请注意,根据您的项目权限,您可能还需要通过-Dsonar.login传递分析令牌。)

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

+0

非常感谢。我完全可以通过从Maven调试生成的类路径并将其写入.properties文件来完全缩小差距,同时使结果图完全不可维护。 – Sloloem

相关问题