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

McH*_*McH 6 maven sonarqube sonar-maven-plugin

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

项目'...'不能有2个带以下密钥的模块:...

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

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

Ric*_*itz 25

自 SonarQube 7.6

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

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

<properties>
    <sonar.projectKey>
        YourKey-${project.groupId}:${project.artifactId}
    </sonar.projectKey>
</properties>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

[INFO] Reactor Summary:
[INFO] 
[INFO] parent ................................. SUCCESS [01:14 min]
[INFO] module1................................. SKIPPED
[INFO] module2 ................................ SKIPPED
[INFO] module3 ................................ SKIPPED
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*e C 7

根据SonarQube分析参数:

sonar.projectKey

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

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

(我经历了同样的循环).

  • 这不能回答问题。有时需要覆盖密钥(例如,如果无法在 SonarQube 中创建具有任意名称的项目)。在这种情况下,您将如何管理子模块? (2认同)