如何以独立于操作系统的方式设置Gradle 'options.bootClasspath'?

2022-09-02 01:17:28

因为我的 Java 源代码和目标必须与 JRE 1.6 兼容,所以我需要设置为包含 和 的 1.6 版本的路径。它必须建立在Windows和Unix(Linux/Solaris)之上。正确的方法是什么?我现在在我的顶级中使用以下方法,它有效,但它似乎远非优雅,特别是依赖于os的分隔符或:options.bootClasspathrt.jarjce.jarbuild.gradle:;

import org.apache.tools.ant.taskdefs.condition.Os

subprojects {
  apply plugin: 'java'

  compileJava {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
    def java6_home = System.getenv("JAVA_HOME_6")
    def java6_lib = "C:/localdata/Program Files (x86)/Java/jdk1.6.0_45/jre/lib/"

    if (java6_home != null) {
      java6_lib = java6_home + "/jre/lib/"
    }

    def sep = ':'
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
      sep = ';'
    }
    options.bootClasspath = java6_lib + "rt.jar" + sep + java6_lib + "jce.jar"
  }
}

答案 1

我使用以下代码(假设JDK6_HOME指向JDK 1.6安装的根目录):

tasks.withType(JavaCompile) {
    doFirst {
        if (sourceCompatibility == '1.6' && System.env.JDK6_HOME != null) {
            options.fork = true
            options.bootClasspath = "$System.env.JDK6_HOME/jre/lib/rt.jar"
            options.bootClasspath += "$File.pathSeparator$System.env.JDK6_HOME/jre/lib/jsse.jar"
            // use the line above as an example to add jce.jar 
            // and other specific JDK jars
        }
    }
}

此方法自动检测环境变量的存在,并自动为所有声明为 1.6 的模块设置 。bootClasspathsourceCompatibility

使用 时需要 。options.fork = truebootClasspath


答案 2

接受的答案可以工作,但是如果你在java.lang之外使用一些类(例如),你可能会发现你会得到各种ClassNotFoundExceptionException的提升,因为更多的JAR文件需要添加到bootClasspath中。javax.crypto.*

为了避免这种情况,我使用以下具有以下优点;

.

tasks.withType(JavaCompile) {
    doFirst {
        if (JavaVersion.toVersion(sourceCompatibility) == JavaVersion.VERSION_1_6
            && JavaVersion.current() != JavaVersion.VERSION_1_6
            && System.env.JDK6_HOME != null) {
            options.fork = true
            options.bootClasspath = fileTree(include: ['*.jar'], dir: "$System.env.JDK6_HOME/jre/lib/").join(File.pathSeparator)
            options.extensionDirs = "$System.env.JDK6_HOME/jre/lib/ext/"
        }
    }
}

推荐