首页 > 解决方案 > Gradle 在 build.gradle 中获取 Java 类路径

问题描述

FindBugs 输出诸如“缺少的类丢失...”之类的错误,因此我通过在以下内容中写入以下内容来检查它的类路径build.gradle

findbugsMain {
    classpath.each {
        println it
    }
}

它不打印任何东西,这意味着类路径是空的。从关于 SO 的各种问题中,我收集到它需要包含 Java 类的类路径(每个写为缺失的类都是本机类)。

我不想硬编码,因为这个项目应该在多台计算机上工作。本机 java 类的类路径应该从 Gradle 本身中找到(它必须在某个地方!但我找不到在哪里)。

我尝试自己添加类路径,方法是:

findbugsMain {
    classpath += sourceSets.main.output
    classpath += sourceSets.main.compileClasspath
    classpath += sourceSets.main.runtimeClasspath
    classpath += sourceSets.test.output
    classpath += sourceSets.test.compileClasspath
    classpath.each {
        println it
    }
}

但这会打印:

/.../build/classes/java/main
/.../build/resources/main
/.../build/classes/java/test
/.../build/resources/test
/.../.gradle/caches/.../junit-4.12.jar
/.../.gradle/caches/.../hamcrest-core-1.3.jar

这仍然不包括Java JARS ...

以下是缺失类的示例:

> Task :findbugsMain 
The following classes needed for analysis were missing:
  java.lang.Object
  java.io.PrintStream
  java.lang.NoSuchFieldError
  java.lang.System

> Task :findbugsTest 
The following classes needed for analysis were missing:
  java.lang.Object
  java.lang.NoSuchFieldError

我知道我非常接近找到解决方案,但在这一点上我看不到正确的线是什么......


评论后编辑:尝试使用 JAVA_HOME。根据这个问题

println org.gradle.internal.jvm.Jvm.current().getJavaHome()

打印/usr/lib/jvm/java-10-openjdk-amd64。但是,我期待的是 Java 8 主页,因为这提供了用于运行 Gradle 的 JVM,而不是用于编译项目的 JVM(sourceCompatibily = '1.8'在我的build.gradle文件中指定)。

标签: gradleclasspath

解决方案


推荐阅读