为什么声纳:声纳需要mvn安装之前?

时间:2014-03-06 10:28:44

标签: java maven sonarqube

官方文件http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven说,调用声纳的正确方法是:

mvn clean install -DskipTests=true
mvn sonar:sonar

但不说明原因。声纳如何工作?它需要编译类吗?那么为什么不只是mvn clean compile?还是需要一个jar文件?那么为什么不只是mvn clean package?什么是声纳插件呢?

3 个答案:

答案 0 :(得分:1)

如果您满足某些要求,可以将SonarQube作为单个Maven命令的一部分运行:

  • 正如Mithfindel所提到的,一些SonarQube插件需要分析.class文件。如果你在SonarQube之外运行单元测试,那么测试插件当然必须读取test阶段的输出。
  • 有集成测试吗?然后你需要在integration-test阶段之后运行。
  • 如果您想将SonarQube作为真正的质量门运行,那么您绝对必须在deploy阶段之前运行它。

一种解决方案是将SonarQube附加到package阶段之后运行。然后,您可以使用简单clean installclean deploy获得完整版本。大多数人不这样做是因为SonarQube非常耗时,但4.0中增加的增量模式在即将到来的4.2中大大改进了解决了这个问题。

就官方文档而言,说“构建然后运行sonar:sonar”会更容易,然后就是说,“打开你的POM,为声纳添加build元素-maven-plugin,将其附加到verify等“。

一个警告。 SonarQube需要Java 6,因此如果您正在构建JDK 1.5(在大型组织中仍然很常见),则必须在选择较新JDK的单独Maven调用中进行分析。我们使用自定义Maven构建包装器解决了这个问题。

答案 1 :(得分:1)

来自 SonarSource team member 的解释:

<块引用>

在多模块构建中,聚合器插件无法从目标文件夹解析依赖项。所以你有两个选择:

  • mvn clean install && mvn sonar:sonar 作为两个独立的进程
  • mvn clean package sonar:sonar 作为单个反应器

我也很惊讶,所以我做了一个 tweet 并收到了以下 answer from the official Maven account

<块引用>

如果插件不是设计为使用 target/classes 文件夹作为替代品,那么是的,当在不同的会话中*运行时,您需要安装以获取 jar。 如果插件作者强迫您在没有 foo 原因的情况下使用安装,请向插件作者投诉 [ed - @connolly_s]

答案 2 :(得分:0)

SonarQube分析器确实需要编译类(例如Findbugs规则,覆盖范围)。并且由于默认情况下它会自己执行测试,因此编译阶段可以跳过测试。