当SonarQube分析我使用Gradle和Jenkins构建的Java项目时,我收到很多关于第三方库无法通过ClassLoader访问的警告:
WARN - Class 'org/slf4j/Logger' is not accessible through the ClassLoader.
WARN - Class 'com/google/gson/Gson' is not accessible through the ClassLoader.
这些库都在我的build.gradle中列为依赖项。
我读了here关于使用sonar.libraries
属性的地方,我将给出Jar的路径。但是因为Gradle为我下载了这些依赖项,所以我的机器上的路径看起来像这样:/home/siberut/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.5/6b262da268f8ad9eff941b25503a9198f0a0ac93/slf4j-api-1.7.5.jar
。
这些路径随着库的每个新版本而改变。
那我怎么能摆脱那些警告呢?有没有办法让Gradle告诉SonarQube关于罐子的位置?
由于
编辑:
我正在使用SonarQube Server 4.1.1,Gradle Plugin 1.23,Sonar Plugin 2.1,Sonar Runner 2.3和gradle --version
给出:
------------------------------------------------------------
Gradle 1.10
------------------------------------------------------------
Build time: 2013-12-17 09:28:15 UTC
Build number: none
Revision: 36ced393628875ff15575fa03d16c1349ffe8bb6
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy: 2.2.0
JVM: 1.7.0_21 (Oracle Corporation 23.7-b01)
OS: Linux 3.10-2-486 i386
以下是构建的完整控制台输出,包括所有警告:Link
詹金斯这样称呼my build.gradle:
詹金斯称SonarQube是这样的:编辑:就像Peter Niederwieser所说,让Gradle调用SonarQube摆脱警告。我的配置的相关部分是here。
答案 0 :(得分:3)
您必须设置sonar.libraries
。但是为了手动设置此属性,您必须定义一个Gradle任务,将所有外部依赖项复制到lib目录,然后使用sonar.libraries=path/to/lib/*.jar
来引用它们。相反,我会通过sonar-runner
Gradle插件调用Sonar,它会为您设置上述属性(加上sonar.libraries
和其他)。
答案 1 :(得分:1)
以下针对我在build.gradle
sonarqube {
properties {
def compileDependencies = project.configurations.compile.files.collect {it.path}join(",")
def compileOnlyDependencies = project.configurations.compileOnly.files.collect {it.path}join(",")
property "sonar.java.libraries", "$compileDependencies,$compileOnlyDependencies"
property "sonar.test.libraries", "$compileDependencies,$compileOnlyDependencies"
}
}