官方文件http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven说,调用声纳的正确方法是:
mvn clean install -DskipTests=true
mvn sonar:sonar
但不说明原因。声纳如何工作?它需要编译类吗?那么为什么不只是mvn clean compile
?还是需要一个jar文件?那么为什么不只是mvn clean package
?什么是声纳插件呢?
答案 0 :(得分:1)
如果您满足某些要求,可以将SonarQube作为单个Maven命令的一部分运行:
test
阶段的输出。integration-test
阶段之后运行。deploy
阶段之前运行它。一种解决方案是将SonarQube附加到package
阶段之后运行。然后,您可以使用简单clean install
或clean 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规则,覆盖范围)。并且由于默认情况下它会自己执行测试,因此编译阶段可以跳过测试。