Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为带有Gradle的多模块项目设置SonarQube 5.4:无法通过类加载器访问类XYZ_Android_Gradle_Sonarqube_Sonarqube Scan - Fatal编程技术网

Android 为带有Gradle的多模块项目设置SonarQube 5.4:无法通过类加载器访问类XYZ

Android 为带有Gradle的多模块项目设置SonarQube 5.4:无法通过类加载器访问类XYZ,android,gradle,sonarqube,sonarqube-scan,Android,Gradle,Sonarqube,Sonarqube Scan,我正在努力为一个多模块项目正确设置QuBE 5.4。我已经读过,而且,所有提供的解决方案都不能解决我的错误:我在对我创建的每个类(不是为我包含的库)进行声纳分析的过程中得到一个警告: “无法通过类加载器访问类XYZ。” 我在Sonar仪表板上没有得到任何结果(无论是在localhost上还是在Jenkins上),甚至分析的时间也没有得到更新。 我使用的是Gradle 2.10,这是我的根Gradle文件: buildscript { repositories { jcenter()

我正在努力为一个多模块项目正确设置QuBE 5.4。我已经读过,而且,所有提供的解决方案都不能解决我的错误:我在对我创建的每个类(不是为我包含的库)进行声纳分析的过程中得到一个警告:

“无法通过类加载器访问类XYZ。”

我在Sonar仪表板上没有得到任何结果(无论是在localhost上还是在Jenkins上),甚至分析的时间也没有得到更新。 我使用的是Gradle 2.10,这是我的根Gradle文件:

buildscript {
repositories {
    jcenter()
    mavenCentral()
    maven {
        url "https://plugins.gradle.org/m2/"
    }
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.0-rc1"
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
}
apply from: 'buildsystem/dependencies.gradle'
apply plugin: "org.sonarqube"

subprojects {
sonarqube {
    properties {
        property "sonar.host.url", "http://localhost:9000/"
        property "sonar.sources", "./src/main/java"
        property "sonar.java.binaries", "./build/"
        property "sonar.projectKey", "net.project"
        property "sonar.projectName", "Project Android"
        property "sonar.projectVersion", "0.5"
        property "sonar.sourceEncoding", "UTF-8"
        }
    }
}
allprojects {
ext {
    androidApplicationId = 'net.project'
    androidVersionCode = 1
    androidVersionName = "0.5"
    testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
    testApplicationId = 'com.beatclip.android.presentation.test'
    }

repositories {
    jcenter()
    }
}

task wrapper(type: Wrapper) {
description 'Creates the gradle wrapper.'
gradleVersion '2.10'
}
匕首2可能是问题所在吗?我在模块集的Gradle文件中没有SonarQube配置,因为在模块Gradle文件中也没有提供任何Sonar配置


感谢您的帮助或帮助!:)

虽然我不知道gradle发生了什么,也不知道如何正确设置它,但我还是设法在扫描中获得了部分更好的结果(仍然有一些类无法加载,但大部分是外部类,所以我希望扫描至少在内部类上起作用)

我使用的是sonarqube插件2.0.1、sonarqube 4.5.7和gradle 2.14.1

我正在为最终的应用程序模块设置此选项,因此这不会直接帮助您使用“多模块”,但可能可以将类似的内容放入
子项目
部分?因为我不理解groovy(1),所以我很难改变任何事情,也很痛苦,我花了好几个小时才到达这里

(1) 我尝试编写的任何东西都会以与我预期不同的方式工作,例如,我希望将
classFilesTree
(文件树实例)直接添加到
属性“sonar.java.binaries”
中就足以遍历文件,但我最终使用了collect+{}。在设置属性之前,每个文件树都要展开它(当时我有几个问题,所以我不确定这是正确的步骤,现在它可以工作了,所以我不打算进行实验)我根本不懂这些高级语言,我无法想象它是如何落在CPU上的,什么在内存中执行什么,所以我一直在努力,我的大脑被训练来处理字节,而不是抽象

plugins {  //instead of the old way with dependecies + apply plugin
    id "org.sonarqube" version "2.0.1"
}

// path to Android SDK jar file, requires sdk.dir=/path/file in local.properties
def androidSdkJarPath;
afterEvaluate {
    def rootDir = project.rootDir
    def localProperties = new File(rootDir, "local.properties")
    if (localProperties.exists()) {
        Properties properties = new Properties()
        localProperties.withInputStream { instr ->
            properties.load(instr)
        }
        def sdkDir = properties.getProperty('sdk.dir')
        androidSdkJarPath = sdkDir + "/platforms/" + android.compileSdkVersion + "/android.jar"
        logger.info('androidSdkJarPath: ' + androidSdkJarPath)
    }
}

sonarqube {
    properties {
        // ... other module configuration for sonar...

        FileTree classFilesTree = fileTree(dir: 'build/intermediates/classes', include: '**/release/**')
        FileTree jarFilesFromAarsTree = fileTree(dir: 'build/intermediates/exploded-aar', include: '**/jars/*.jar', exclude: ['**/debug/jars/**', '**/snapshot/jars/**'])

        def classFiles = []
        def jarFilesFromAars = []
        classFilesTree.collect { relativePath(it) }.each { classFiles += it }
        jarFilesFromAarsTree.collect { relativePath(it) }.each { jarFilesFromAars += it }
//        logger.warn('classFiles: ' + classFiles )
//        logger.warn('jarFilesFromAars: ' + jarFilesFromAars )
        // Still MIA (on my project): android.support.v4.**, ...

        property "sonar.java.binaries", classFiles
        property "sonar.libraries", [jarFilesFromAars, androidSdkJarPath]
    }
}

subprojects {
    sonarqube {
        properties["sonar.sources"] += "src/main/java"
        properties["sonar.test"] += ["src/androidTest/java", "src/test/java"]
    }
}