当前位置: 首页 > 知识库问答 >
问题:

用sonarqube gradle插件的子模块配置Android项目的正确方法是什么?

黄俊誉
2023-03-14
git_repository
|----- android_project
  |--- app
  |--- SDK
    |- api
$ ./gradlew clean sonarqube
* snip *
:sonarqube
Invalid value for sonar.java.test.libraries
:sonarqube FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sonarqube'.
> No files nor directories matching '/Users/my_username/git_repository/android_project/app/build/intermediates/dependency-cache/debug'

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or -- debug option to get more log output.

BUILD FAILED

Total time: 9.897 secs
$

git_repository/android_project/settings.gradle完整清单

include ':app', ':api'
project(':api').projectDir = new File('SDK/api')

git_repository/android_project/build.gradle完整清单

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

apply plugin: 'org.sonarqube'

allprojects {
    repositories {
        jcenter()
    }
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
}

//subprojects {
//    sonarqube {
//        properties {
// //           property "sonar.sources", "src"
//        }
//    }
//}

//sonarqube {
//    properties {
////        property "sonar.exclusions", "file:**/SDK/**"
//    }
//}

subprojects {
    sonarqube {
        properties {
            property "sonar.sourceEncoding","UTF-8"
            property "sonar.sources","src/main/java"
            property "sonar.java.binaries", "./build/"
            property "sonar.tests","src/androidTest"
//            property "sonar.exclusions","build,build/**,**/*.png"

            property "sonar.import_unknown_files", true

            property "sonar.android.lint.report", "./build/outputs/lint-results.xml"
        }
    }
}

project(":api") {
    sonarqube {
        skipProject = true
    }
}

共有1个答案

端木宏才
2023-03-14

是的,对于一个有多个模块的项目来说,这有点棘手,这是使用适当的通配符实现的。

按照以下步骤操作:

下面是上面提到的两个文件的示例:

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/"

    }
}
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()
    }
}
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'

只需运行命令

./gradlew sonarqube 

相信我,该项目将成功构建并被推入sonarqube服务器,并显示错误结果

如果您正在使用findbugs,请在推动之前创建项目,否则构建将失败,因为findbugs需要字节码来分析

//noinspection GroovyAssignabilityCheck
            property "sonar.projectKey", "appar_app"
 类似资料:
  • 问题内容: 我正在Heroku上编写一个node.js应用程序,并使用pg模块。我无法弄清楚为查询数据库所需的每个请求获取客户端对象的“正确”方法。 该文档使用如下代码: 但是,您肯定不需要在使用数据库的每个函数中调用对吗?我看过其他执行此操作的代码: 我倾向于第二种选择,因为我相信Heroku的免费数据库实例无论如何都仅限于一个连接,但是以这种方式进行操作是否有任何弊端?每次使用之前,是否需要检

  • 我正在尝试构建一个私有模块,我知道它只会被另一个TypeScript项目使用。 据此,(https://github.com/Microsoft/TypeScript/issues/5225)我应该能够简单地导入我的其他项目,而不需要构建类型定义。 问题是,当我试图导入该库时,我缺少该库上任何依赖项的类型定义。 情况如下: 假设你有两个项目<代码>库和导入,这是一个纯类型脚本节点模块。 只是从导入

  • 问题内容: 我正在尝试将log4j配置为使用,但我不断收到中继访问被拒绝的错误。在笔记本电脑上直接从共享托管环境执行代码时,出现此错误。 这是相关的配置: 如果改用,则会收到身份验证错误。我的主机位于DreamHost上,因此如果有人使用DreamHost电子邮件帐户设置了log4j,则可获赠积分。 问题答案: 原来我只是把属性都弄错了。应该:

  • 我的gradle项目结构如下所示: 对于子项目,将使用引用gradle任务。 有什么想法让它正常工作吗?

  • 我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量。 这是我在根项目中的build.gradle文件: 这就是建筑。gradle文件子项目之一: 当我想运行构建脚本时,我得到了以下异常: 无法获取类型为org的对象的未知属性“mainClassName”。格雷德尔。应用程序编程接口。JAVA档案内部的默认舱单。 在子流

  • 我有一个带有tflite模型推断的。cpp代码。此源代码文件是bazel工作区的一部分。我想用默认的桌面编译器和ndk的arm64自定义工具链来构建它,然后在PC和移动上运行它,并比较结果。如何从ndk工具链(someandroidndkpath/toolchains/arm64/bin/clang)中指定自定义编译器? 我在构建文件中有一个简单的目标: 编辑:多亏了@ahumesky,它起作用了