使用maven时覆盖声纳projectKey

时间:2014-04-26 15:10:35

标签: maven sonarqube

我想在一个项目密钥下对25个模块进行分组,这样我就可以获得代码重复的统一视图。但是,声纳maven插件使用<groupId>:<artifactId>,因此每个项目都是独立的。

我已尝试覆盖sonar.projectKey,但maven插件不考虑它。

有没有办法在单个名称下将模块组合在一起,以便您可以拥有聚合视图? 或者在sonarqube服务器中还有其他一些来获取聚合视图吗?

2 个答案:

答案 0 :(得分:5)

据我所知,与某些other forum posts相反,至少使用maven-sonar-plugin的v3.2(可能更早),sonar.projectKey属性得到尊重并覆盖默认值${project.groupId}:${project.artifactId}

检查源代码还确认它在默认之前首先查找该属性。

<强> org.sonarsource.scanner.maven.bootstrap.MavenSonarRunner.java

private static void defineProjectKey(MavenProject pom, Properties props) {
  String key;
  if (pom.getModel().getProperties().containsKey(ScanProperties.PROJECT_KEY)) {
    key = pom.getModel().getProperties().getProperty(ScanProperties.PROJECT_KEY);
  } else {
    key = getSonarKey(pom);
  }
  props.setProperty(MODULE_KEY, key);
}

private static String getSonarKey(MavenProject pom) {
  return new StringBuilder().append(pom.getGroupId()).append(":").append(pom.getArtifactId()).toString();
}

<强> org.sonarsource.scanner.api.ScanProperties

String PROJECT_KEY = "sonar.projectKey";

例如,通过在POM中设置以下内容,可以覆盖projectKey:

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

在Maven 3.3.9上测试。如果这有助于任何人!

链接到原始GitHub来源: https://github.com/SonarSource/sonar-scanner-maven/blob/master/src/main/java/org/sonarsource/scanner/maven/bootstrap/MavenProjectConverter.java

答案 1 :(得分:0)

我有类似的设置,并为http://maven.apache.org/pom.html#Aggregation使用多模块/聚合器项目。

只需将包含模块的聚合器pom传递给声纳构建,它应该将所有模块组合在一起。分组名称取自聚合器工件属性(可以通过其name-property覆盖)。

<groupId>...</groupId>
<artifactId>aggregator-project</artifactId>
<version>...</version>
<packaging>pom</packaging>
<name>Group name overrites artifactId</name>

<modules>
 <module>my-project</module>
 <module>another-project</module>
</modules>