官方文档http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven说调用声纳的正确方法是:
mvn clean install -DskipTests=true
mvn sonar:sonar
但没有说明原因。声纳如何工作?它需要编译类吗?那么为什么不只是
mvn clean compile
呢?或者它需要一个jar文件吗?那么为什么不只是mvn clean package
呢?声纳插件到底是什么?
在多模块构建中,聚合器插件无法解析目标文件夹的依赖关系。所以你有两个选择:
&&mvn clean install
作为两个独立的进程mvn sonar:sonar
作为单个反应器[同时,SonarQube文档说mvn clean package sonar:sonar
]verify
我也很惊讶,所以我发了一条tweet并收到了来自Maven官方帐户的以下答案:
如果插件未设计为使用 target/classes 文件夹作为替代,那么您需要安装才能在*在不同的会话*中运行时获取 jar。 如果插件作者强迫您在没有 foo 原因的情况下安装,请向插件作者投诉 [ed - @connolly_s]
SonarQube 分析器确实需要编译类(例如 Findbugs 规则、覆盖率)。由于默认情况下它会自行执行测试,因此编译阶段可以跳过测试。
如果满足某些要求,您可以将 SonarQube 作为单个 Maven 命令的一部分运行:
test
阶段的输出。integration-test
阶段之后运行。deploy
阶段之前运行它。一种解决方案是仅附加 SonarQube 以在
package
阶段之后运行。然后,您可以使用简单的 clean install
或 clean deploy
获得完整的构建。大多数人不会这样做,因为 SonarQube 很耗时,但是 4.0 中添加的增量模式以及即将推出的 4.2 中的大幅改进解决了这个问题。
就官方文档而言,说“构建然后运行
sonar:sonar
”要容易得多,也就是说,“打开你的POM,为sonar-maven-plugin添加一个build
元素,附加它到verify
等”。
一个警告。 SonarQube 需要 Java 6,因此如果您针对 JDK 1.5 进行构建(在大型组织中仍然很常见),则必须在选择较新 JDK 的单独 Maven 调用中进行分析。我们使用自定义 Maven 构建包装器解决了这个问题。