我正在使用sonar-maven-plugin 3.2和maven 3.3.9。在父POM中,我定义了sonar.projectKey maven属性。该值已生效,我可以从声纳的打印输出中看到它。但是mvn声纳:声纳步骤失败,因为maven模块使用相同的项目键值,因为maven属性在所有模块中具有相同的值。声纳给出错误:
项目'...'不能有2个带有以下密钥的模块:...
真的没有办法让一个包含所有maven模块的声纳项目?所有模块都必须是真正不同的声纳项目吗?
我知道我可以将分支属性用作hack,但我想避免这样做。如果有一种方法可以在声纳中使用包含所有maven模块的单个项目密钥进行maven多模块项目,那将是最好的......
答案 0 :(得分:5)
根据SonarQube Analysis Parameters:
sonar.projectKey
每个项目唯一的项目键。 允许的字符是:字母,数字,' - ','_','。'和':',至少有一个非数字。
使用Maven时,会自动设置为<groupId>:<artifactId>
。
因此,请删除sonar.projectKey
配置,它应该有效。
(我经历了同样的循环)。
答案 1 :(得分:1)
我想我终于找到了执行此操作的正确方法。在parent.pom中,声明以下属性:
<properties>
<sonar.projectKey>
YourKey
</sonar.projectKey>
<sonar.moduleKey>
${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
因此,我不确定确切的模块解析是如何完成的,但最终所有模块都显示在报告中。
答案 2 :(得分:0)
必须有一种方法来唯一识别每个组件。正如Steve C所说,你不能拥有两个具有相同项目密钥的项目。在项目中,模块还必须具有唯一标识符。否则,分析第二个&#34;模块b&#34;将覆盖第一个&#34;模块b&#34;。