如何以独立于操作系统的方式设置 Gradle `options.bootClasspath`? [英] How to set Gradle `options.bootClasspath` in an os independent manner?
问题描述
因为我的 Java 源代码和目标必须与 JRE 1.6 兼容,所以我需要将 options.bootClasspath
设置为包含 1.6 版本的 rt.jar
和 <代码>jce.jar.它必须在 Windows 和 Unix (Linux/Solaris) 上构建.这样做的正确方法是什么?我现在在我的顶级 build.gradle
中使用以下方法,它有效,但它似乎远非优雅,尤其是依赖于操作系统的分隔符 :
或 ;
:
Because my Java sources and targets must be JRE 1.6 compatible, I need to set options.bootClasspath
to a path that contains the 1.6 versions of rt.jar
and jce.jar
. It must build on both Windows and Unix (Linux/Solaris). What is the proper way to do this? I now use the following approach in my top-level build.gradle
, it works, but it seems far from elegant, especially the os-dependent separator :
or ;
:
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"
}
}
推荐答案
我正在使用以下代码(假设 JDK6_HOME 指向 JDK 1.6 安装的根目录):
I am using the following code (assuming the JDK6_HOME points to the root of the JDK 1.6 installation):
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
}
}
}
这种方法会自动检测环境变量的存在,并为所有声明 sourceCompatibility
为 1.6 的模块自动设置 bootClasspath
.
This approach automatically detects the presence of the environment variable and automatically sets the bootClasspath
for all modules that declare sourceCompatibility
as 1.6.
当您使用 bootClasspath
时,options.fork = true
是必需的.
The options.fork = true
is required when you use bootClasspath
.
这篇关于如何以独立于操作系统的方式设置 Gradle `options.bootClasspath`?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!