是的,对于具有多个模块的项目来说有点棘手,它是使用适当的通配符来实现的。
按着这些次序:
in the master module which contains all the sub-modules place the
sonarqube.gradle file
in the build.gradle file of the master module add the maven plugin and
class dependencies
这是上述两个文件的示例:
声纳库.gradle
apply plugin: "org.sonarqube"
sonarqube {
//noinspection GroovyAssignabilityCheck
properties {
//noinspection GroovyAssignabilityCheck
property "sonar.projectName", "appar"
//noinspection GroovyAssignabilityCheck
property "sonar.projectVersion", "1.0"
//noinspection GroovyAssignabilityCheck
property "sonar.analysis.mode", "publish"
//noinspection GroovyAssignabilityCheck
property "sonar.language", "java"
//noinspection GroovyAssignabilityCheck
property 'sonar.sourceEncoding', "UTF-8"
//noinspection GroovyAssignabilityCheck
property "sonar.sources", "./src/main"
// noinspection GroovyAssignabilityCheck
property "sonar.exclusions", "src/main/java/com/appar/model/**, **/*Entity.java"
//noinspection GroovyAssignabilityCheck
property "sonar.host.url", "http://192.168.21.33:9000"
//noinspection GroovyAssignabilityCheck
property "sonar.login", "admin"
//noinspection GroovyAssignabilityCheck
property "sonar.profile", "fulllint"
//noinspection GroovyAssignabilityCheck
property 'sonar.import_unknown_files', true
//noinspection GroovyAssignabilityCheck
property "sonar.android.lint.report", "./build/outputs/lint-results-debug.xml"
//noinspection GroovyAssignabilityCheck
property "sonar.password", "admin"
//noinspection GroovyAssignabilityCheck
property "sonar.java.binaries", "build/"
}
}
构建.gradle
buildscript {
repositories {
jcenter()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.0.1"
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.1'
}
}
allprojects {
repositories {
jcenter()
}
}
然后从sonarqube.gradle应用到单独模块的build.gradle中
这是子模块之一的 build.gradle 的示例:
apply plugin: 'com.android.library'
apply from: '../sonarqube.gradle'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 21
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
testCoverageEnabled = true
}
}
}
dependencies {
compile project(':java-library')
testCompile 'junit:junit:4.12'
testCompile "org.robolectric:robolectric:3.1.4"
}
只需将此行与所有其他应用行一起放置,如上面的文件所示
apply from: '../sonarqube.gradle'
将 sonarqube.gradle 应用于子模块中的所有 build.gradle 文件后。
只需运行命令
./gradlew sonarqube
相信我,该项目将成功构建并推送到 sonarqube 服务器,并且将显示错误结果
如果您使用 findbugs 在推送之前先创建项目,否则构建将失败,因为 findbugs 需要字节码来分析。
并且不要使用该属性
//noinspection GroovyAssignabilityCheck
property "sonar.projectKey", "appar_app"
这个 sonar.projectKey 属性。 SonarQube 使用它来识别声纳数据库中的每个项目(或模块)。
因此,如果您的所有模块都具有相同的 projectKey 值,SonarQube 将更新其数据库中的一个项目。
不用担心,该属性会自动设置为每个模块的文件夹名称。