Sonar maven 插件:所有模块的相同项目密钥不起作用?

Sonar maven plugin: same project key for all modules does not work?

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

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

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

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

根据SonarQube Analysis Parameters

sonar.projectKey

The project key that is unique for each project. Allowed characters are: letters, numbers, '-', '_', '.' and ':', with at least one non-digit.
When using Maven, it is automatically set to <groupId>:<artifactId>.

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

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

必须有一种方法来唯一标识每个组件。正如 Steve C 所说,您不能拥有两个具有相同项目密钥的项目。在一个项目中,模块也必须有唯一的标识符。否则,第二个 "module b" 的分析将覆盖第一个 "module b".

从 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 is/was 模块感知。 要在 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

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