Sonarqube如何正确配置gradle子项目?

时间:2016-03-07 18:58:06

标签: gradle sonarqube

我的gradle项目结构如下所示:

geode-core
geode-lucene
extensions/geode-modules
extensions/geode-modules-session

对于extensions个子项目,例如,extensions/geode-modules:build会引用gradle任务。

当我尝试在Gradle中使用SonarQube时,我收到以下错误(这是1.2 SonarQube Gradle插件):

Validation of project reactor failed:
  o "io.pivotal.gemfire:extensions/geode-modules" is not a valid project or module key. Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.
  o "io.pivotal.gemfire:extensions/geode-modules-session" is not a valid project or module key. Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.

因此模块名称中的/导致了问题。为了解决这个问题,我尝试在此主题上使用解决方案:http://sonarqube-archive.15.x6.nabble.com/Is-not-a-valid-project-or-module-key-when-Upgrade-sonar-3-0-to-4-0-td5021412.html

我的gradle配置现在看起来像这样:

sonarqube {
  properties {
    property "sonar.modules", "extensions.geode-modules"
    ...
    property "extensions.geode-modules.sonar.projectName", "geode-modules"
    property "extensions.geode-modules.sonar.sources", "src/main/java"
  }
}

同样的错误。此外,这也没有工作:

sonarqube {
  properties {
    property "sonar.modules", "extensions/geode-modules"
    ...
    property "extensions/geode-modules.sonar.projectName", "geode-modules"
    property "extensions/geode-modules.sonar.sources", "src/main/java"
  }
}

有关如何使其正常工作的任何想法?

2 个答案:

答案 0 :(得分:4)

通用方法是替换模块名称中的所有斜杠。这样,您就不需要配置各种属性。在root build.gradle文件中添加此部分:

subprojects {

    sonarqube {
        String regex = "(.*)/(.*)"
        String projectKey = project.name.replaceAll(regex, "\$1:\$2")
        String sonarModuleKey = rootProject.group + ':' + rootProject.name + ':' + projectKey

        properties {
            property "sonar.moduleKey", sonarModuleKey
        }
    }
}

答案 1 :(得分:0)

您需要向模块添加子模块并使用Property文件 例如:

projectMy-
       -moduleOne
             --oneSub1
             --oneSub2
       -moduleTwo
             --twoSub1
             --twoSub2
-sonar-project.properties

属性:

sonar.projectName=\:projectMy
sonar.projectKey=projectMy
sonar.projectVersion=0.0.0.1
sonar.host.url=<sonar.host:port>
sonar.jdbc.driverClassName=<jdbc.driver.name>
sonar.jdbc.url=<your.jdbc>
sonar.jdbc.username=<your.username>
sonar.jdbc.password=<your.password>
sonar.forceAnalysis=true
sonar.sourceEncoding=UTF-8
sonar.sources=src/main/java
sonar.modules=moduleOne,moduleTwo
moduleOne.sonar.modules=oneSub1,oneSub2
moduleTwo.sonar.modules=twoSub1,twoSub2

和build.gradle任务

apply plugin: 'sonar-runner'
version = '<version>'
repositories {
   mavenCentral()
}
sonarRunner {

   sonarProperties {
      property "sonar.projectVersion", project.version
   }
}

如果你只想要gradle

sonarqube {
  properties {
    property "sonar.modules", "extensions"
    ...
    property "extensions.sonar.modules", "geode-modules"
    property "geode-modules.sonar.sources", "src/main/java"
  }
}