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