修复'Class不能通过ClassLoader访问'。 Jenkins,SonarQube和Gradle警告

时间:2014-02-14 12:44:28

标签: jenkins gradle sonarqube

当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.23Sonar 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.gradleJenkins calls build.gradle

詹金斯称SonarQube是这样的: Jenkins calls SonarQube


编辑:就像Peter Niederwieser所说,让Gradle调用SonarQube摆脱警告。我的配置的相关部分是here

2 个答案:

答案 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"

    }
}