【问题标题】:Sonar maven plugin: same project key for all modules does not work?Sonar maven 插件:所有模块的相同项目密钥不起作用?
【发布时间】:2017-09-23 11:26:19
【问题描述】:

我正在使用 sonar-maven-plugin 3.2 和 maven 3.3.9。在父 POM 中,我定义了 sonar.projectKey maven 属性。该值是有效的,我可以从声纳的打印输出中看到它。但是 mvn sonar:sonar 步骤失败,因为 maven 模块使用相同的项目键值,因为 maven 属性在所有模块中具有相同的值。声纳给出错误:

项目“...”不能有 2 个具有以下键的模块:...

真的没有办法拥有一个包含所有 maven 模块的声纳项目吗?所有模块都必须是真正不同的声纳项目吗?

我知道我可以将分支属性用作 hack,但我想避免这样做。如果有一种方法可以在声纳中使用一个包含所有 Maven 模块的单个项目密钥来创建一个 Maven 多模块项目,那将是最好的......

【问题讨论】:

    标签: maven sonarqube sonar-maven-plugin


    【解决方案1】:

    根据SonarQube Analysis Parameters

    sonar.projectKey

    每个项目唯一的项目密钥。 允许的字符有:字母、数字、'-'、'_'、'.'和':',至少有一个非数字。
    使用Maven时,自动设置为<groupId>:<artifactId>

    因此,删除您的 sonar.projectKey 配置,它应该可以工作。

    (我也经历过同样的循环)。

    【讨论】:

    • 有没有办法覆盖这个键来使用我们自己的?
    • 这不能回答问题。有时需要覆盖密钥(例如,如果无法在 SonarQube 中创建具有任意名称的项目)。在这种情况下,您将如何管理子模块?
    【解决方案2】:

    必须有一种方法来唯一标识每个组件。正如史蒂夫 C 所说,你不能有两个项目具有相同的项目密钥。在一个项目中,模块也必须有唯一的标识符。否则,对第二个“模块 b”的分析将覆盖第一个“模块 b”。

    【讨论】:

    • 那么每个模块都需要单独的 projectKeys 吗?没有可用于一次跟踪多模块项目中的所有代码的中间层次结构?
    • 我想通了,看我的回答。
    【解决方案3】:

    自 SonarQube 7.6 起

    模块已在最近的版本中删除。我还无法验证以下基于模块的解决方案是否适用于 SonarQube 8.x,但假设必须使用不同的解决方案。当我联系 SonarQube 支持时,他们建议管理项目密钥前缀的权限,并使用前缀范围的项目创建权限来动态创建共享该前缀的项目密钥

    在这种情况下,您的 pom.xml 将如下所示:

    <properties>
        <sonar.projectKey>
            YourKey-${project.groupId}:${project.artifactId}
        </sonar.projectKey>
    </properties>
    

    其中YourKey 是项目前缀。 这需要您的 SonarQube 管理员应用建议的权限方案。

    预 SonarQube 7.6

    SonarQube 7.6 之前的版本是/曾经是模块感知的。 要在 parent.pom 中定义模块,请声明以下属性:

    <properties>
        <sonar.projectKey>
            YourKey
        </sonar.projectKey>
        <sonar.moduleKey>
            ${project.groupId}:${project.artifactId}
        </sonar.moduleKey>
    </properties>
    

    这两个属性都将由您的模块继承。然后,这会将结果编译为单个 Sonar 报告,跟踪公共 projectKey 下的子模块。 有趣的是,结果是:

    [INFO] Reactor Summary:
    [INFO] 
    [INFO] parent ................................. SUCCESS [01:14 min]
    [INFO] module1................................. SKIPPED
    [INFO] module2 ................................ SKIPPED
    [INFO] module3 ................................ SKIPPED
    

    因此,我不确定确切的模块解析是如何完成的,但最终所有模块都显示在报告中。

    【讨论】:

    • 7.6 之前的解决方案帮助解决了我的问题。还值得一提:projectKey 不得与已存在报告的任何moduleKey 匹配,并且moduleKey 必须已存在于具有不同projectKey 的报告中(除非还有一个(不同的)branch.name 附加到moduleKey,所以它们又是独一无二的)。
    猜你喜欢
    • 2017-09-24
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2014-09-26
    • 2015-12-30
    相关资源
    最近更新 更多