我正在努力为多模块项目正确设置SonarQube 5.4。我已经阅读了here,here和here,所有提供的解决方案都无法解决我的错误:我在Sonar分析期间为每个创建的课程进行了分析(不适用于库I)包括)警告:
“无法通过ClassLoader访问类XYZ。”
我在Sonar仪表板上没有得到任何结果(在本地主机和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'
}
可能是Dagger2的问题吗?我在模块集的Gradle文件中没有SonarQube配置,因为this example from SonarQube也没有在模块Gradle文件中提供任何Sonar配置。
感谢任何帮助或示例! :)
答案 0 :(得分:0)
虽然我不知道gradle会发生什么以及如何正确设置它,但我在某种程度上设法在扫描中获得了更好的结果(仍然有些类无法加载,但大多数是外部的,所以我希望扫描至少在内部工作。)
我正在使用sonarqube插件2.0.1,sonarqube 4.5.7,gradle 2.14.1。
我正在为最终的应用程序模块设置这个,所以这不会直接帮助你使用“多模块”,但也许类似的东西可以放入subprojects
部分?因为我不懂groovy(1),所以改变任何东西是非常困难和痛苦的,在我至少到达这里之前花了几个小时。
(1)我尝试编写的任何东西都以我预期的方式工作,例如我希望将classFilesTree
(文件树实例)直接添加到property "sonar.java.binaries"
就足以遍历文件,但我最终使用了collect + {} .each来扩展它,然后再设置属性(我当时有几个问题,所以我不确定这是正确的步骤,现在它有效,所以我不是去实验)。我根本不理解这些高级语言,我无法想象它是如何落在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"]
}
}