【问题标题】:Maven SonarQube multi moduleMaven SonarQube 多模块
【发布时间】:2016-07-26 02:20:41
【问题描述】:

我有一个由几个模块组成的项目。

我正在尝试使用 SonarQube 分析这些。

我已将 Sonar Maven 插件作为依赖项包含在每个模块中:

<dependency>
  <groupId>org.codehaus.sonar</groupId>
  <artifactId>sonar-maven-plugin</artifactId>
  <version>5.1</version>
</dependency>

然后我正在使用以下方式运行 Maven:

mvn clean 验证声纳:声纳

Maven 成功完成,我可以看到 Sonar 分析正在进行,但是当我打开 Sonar UI 时,模块在项目中不可见。

不过……

如果我从单个模块目录运行 Maven 命令,它在项目中是可见的。

感觉我遗漏了一些非常简单的东西,感谢任何帮助!

【问题讨论】:

    标签: java maven sonarqube


    【解决方案1】:

    将sonar-maven-plugin 放在根pom.xml 的&lt;build&gt; 部分中,而不是作为依赖项,如下所示:

    <build>
        <plugins>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>3.0.1</version>
            </plugin>
        </plugins>
    </build>
    

    而且既然是多模块项目,你应该first perform an install from the root project and then run the sonar:sonar goal as a dedicated step,如下:

    mvn clean install
    mvn sonar:sonar
    

    要配置 sonarqube 服务器 URL,specify a project property of sonar.host.url 在您的 settings.xml 或 pom.xml 中,如下所示:

    <properties>
        <!-- Optional URL to server. Default value is http://localhost:9000 -->
        <sonar.host.url>http://myserver:9000</sonar.host.url>
    </properties>
    

    【讨论】:

    • 这看起来奏效了。我需要删除从单个模块运行时创建的 Sonar 项目,但在此之后我可以看到创建的项目。似乎 v5.1 也不能作为插件使用,我不得不改用 2.7.1。不是 Maven 专家,所以不确定为什么会这样……?
    • 适用于 Maven 的 SonarQube Scanner 版本未遵循 SonarQube 服务器版本。请查看docs.sonarqube.org/display/SCAN/…
    • @timothyclifford 正如 Julien H. 所提到的,Maven 插件与 SonarQube 本身具有独立的版本控制。我更正了答案,以将 groupId/artifactId/version 用于与 SonarQube 服务器 v5.1 兼容的最新版本的插件。
    • 谢谢@AbrahamGrief,看来你是对的。我很困惑其他版本(4、5)支持什么? mvnrepository.com/artifact/org.codehaus.sonar/… 有什么想法吗?
    • @timothyclifford 我从wiki 推断出maven 插件的版本3.0.1 支持4.5 及更高版本。我会远离任何在 groupId 中包含 codehaus 的工件,因为 codehaus 已停产,除非您试图让旧的东西正常工作。
    【解决方案2】:

    SonarQube 支持多模块项目,就像 Maven 一样。这意味着包含多个模块的 Maven 项目映射到包含多个模块/组件的 SonarQube 项目,而不是多个项目。

    以 SonarQube 代码为例(它是一个多模块的 Maven 项目):parent project 聚合了来自子模块的所有信息,然后如果您查看它的 structure(或它的 code 页面),您可以看到所有子组件的列表(例如:SonarQube::Core)

    底线是您看到了预期的行为。 Maven 项目的子模块不应该作为项目进行分析,您应该始终分析父项目,SonarQube 将本地处理模块。

    【讨论】:

    • Nicolas 请您解释一下为什么需要单独调用 maven 作为@heenenee 报告?因为这是违反直觉的,并且似乎与 Maven 通常的工作方式相矛盾;例如,不必单独运行“mvn clean”然后“mvn install”,只需运行“mvn clean install”即可。谢谢。
    • 提供的链接已损坏
    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 2016-01-09
    • 2017-10-11
    • 2016-03-07
    • 1970-01-01
    • 2013-09-12
    • 2017-01-10
    • 2012-04-27
    相关资源
    最近更新 更多