【问题标题】:Sonar missing dependencies between Maven modules声纳缺少 Maven 模块之间的依赖关系
【发布时间】:2013-12-17 05:39:33
【问题描述】:

我搜索了几个与多模块 maven 项目和声纳相关的问题,但这些问题主要是关于聚合代码覆盖率指标。

我有一个由声纳分析的多模块 maven 项目。 如果我使用mvn sonar:sonar 直接从终端运行分析,结果分析将在设计页面中显示 maven 模块之间的依赖关系。

但是,如果我通过 Jenkins 调用 sonar-runner 来运行分析,结果分析将丢失 maven 模块之间的依赖关系。

这是我设置声纳参数的顶级 pom 的 sn-p:

<profile>
    <id>sonar</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <sonar.jdbc.url>
            jdbc:mysql://myhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8
        </sonar.jdbc.url>
        <sonar.jdbc.username>sonar</sonar.jdbc.username>
        <sonar.jdbc.password>sonar</sonar.jdbc.password>
        <sonar.host.url>http://myhost:9999</sonar.host.url>
        <sonar.java.source>1.7</sonar.java.source>
        <sonar.login>jenkins</sonar.login>
        <sonar.password>jenkins</sonar.password>
    </properties>
</profile>                

在 Jenkins 上,我将作业配置为在构建步骤中执行 clean install -DskipTests=true,然后执行构建后操作以运行声纳。

我正在使用 Maven 3.0.5 版、SonarQube 3.7 版、Sonar Runner 2.3 和 Java 1.7.0_45。

知道我的配置中可能缺少什么吗?

【问题讨论】:

    标签: java maven jenkins dependencies sonarqube


    【解决方案1】:

    确实,SonarQube Maven 引导程序依赖 Maven 来获取依赖项(在模块上或在外部库上)。但是 SonarRunner 无法访问此类信息,这就是为什么当您使用 SonarRunner 分析项目时,您无法获得任何有关外部依赖项的信息。

    【讨论】:

    • 看来,如果我从命令行运行mvn sonar:sonar,我确实会在设计页面中获得模块间依赖关系。但是,如果我在 jenkins 中执行相同的构建后步骤,则不会显示依赖项。知道为什么吗?
    • 通过一些实验,我发现如果我不设置属性sonar.branch,模块间依赖关系会出现在设计页面中。
    【解决方案2】:

    好的,如果您使用的是 Jenkins,您需要安装 Sonar Plugin 并设置参数。然后,您需要创建一个作业并运行 maven 目标:

    clean install
    

    之后,标记 Sonar 支票簿。运行你的工作,你应该会看到你的代码覆盖率。

    PS:如果你使用的是模块,你的所有模块都必须有 pom-root。

    【讨论】:

    • 感谢您抽出宝贵时间,但我描述的问题与代码覆盖率无关。我安装了声纳插件,我可以从 Jenkins 构建和分析项目。我的问题是关于模块间的依赖关系。您希望在 SonarQube 设计页面上看到的模块之间的依赖关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-03-13
    • 2018-12-28
    • 1970-01-01
    • 2012-03-09
    • 2010-10-16
    相关资源
    最近更新 更多