16

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

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

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

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

4

3 回答 3

26

从 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

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

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

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

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

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

于 2019-01-15T17:07:40.220 回答
15

根据SonarQube 分析参数

声纳.projectKey

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

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

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

于 2017-04-26T07:46:10.927 回答
1

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

于 2017-04-26T11:54:18.933 回答