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

问题描述 投票:0回答:3

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

mvn clean install -DskipTests=true
mvn sonar:sonar

但没有说明原因。声纳如何工作?它需要编译类吗?那么为什么不只是

mvn clean compile
呢?或者它需要一个jar文件吗?那么为什么不只是
mvn clean package
呢?声纳插件到底是什么?

java maven sonarqube
3个回答
3
投票

来自 SonarSource 团队成员的解释

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

  • mvn clean install
    &&
    mvn sonar:sonar
    作为两个独立的进程
  • mvn clean package sonar:sonar
    作为单个反应器[同时,SonarQube文档
    verify
    ]

我也很惊讶,所以我发了一条tweet并收到了来自Maven官方帐户的以下答案

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


1
投票

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


1
投票

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

  • 正如 Mithfindel 提到的,一些 SonarQube 插件需要分析 .class 文件。如果您在 SonarQube 之外运行单元测试,那么测试插件当然必须读取
    test
    阶段的输出。
  • 有集成测试吗?然后你需要在
    integration-test
    阶段之后运行。
  • 如果您想将 SonarQube 作为真正的质量门来运行,那么您绝对必须在
    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 构建包装器解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.