当前位置: 首页 > 知识库问答 >
问题:

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

徐瀚
2023-03-14

因为我的Java源代码和目标必须与JRE1.6兼容,所以我需要将options.bootclasspath设置为包含rt.jarjce.jar1.6版本的路径。它必须构建在Windows和Unix(Linux/Solaris)上。做这件事的适当方法是什么?我现在在我的顶级build.gradle中使用了以下方法,它起作用了,但似乎远不优雅,特别是与OS相关的分隔符::

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

萧和同
2023-03-14

我使用以下代码(假设JDK6_HOME指向JDK1.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
        }
    }
}

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

使用bootclasspath时,options.fork=true是必需的。

 类似资料:
  • 问题内容: 因为我的Java源和目标必须与JRE 1.6兼容,所以我需要设置一个包含1.6 和和1.6版本的路径。它必须同时在Windows和Unix(Linux / Solaris)上构建。正确的方法是什么?现在,我在顶层使用以下方法,它可以工作,但看起来还很不完善,尤其是依赖于OS的分隔符或: 问题答案: 我正在使用以下代码(假设JDK6_HOME指向JDK 1.6安装的根目录): 此方法自动

  • 问题内容: 要在npm脚本中访问变量,请在您的计算机中执行以下操作: 问题是只能在Unix下使用,而在Windows上则不能使用。 有没有办法使该操作系统独立?如果npm可以在调用命令之前进行这样的变量扩展,那就太好了。 问题答案: 要使其跨平台,请使用:

  • 问题内容: 我想确定我的Java程序正在以编程方式运行的主机的操作系统(例如:我希望能够基于我在Windows还是Unix平台上加载不同的属性)。做到100%可靠性的最安全方法是什么? 问题答案: 你可以使用: PS:你可能会发现此代码有用: 它所做的只是打印出Java实现提供的所有属性。通过它,你可以了解可以通过属性了解Java环境的内容。

  • 我试图在我的应用程序中使用谷歌云翻译API,但当我添加: 发生以下错误: 找到了多个具有操作系统独立路径“META-INF/INDEX”的文件。列表'。 添加此选项并不能解决问题:

  • 在我的项目中添加了videoCompressor库后,我开始遇到这个问题。 发现多个文件具有独立于操作系统的路径'builddef.lst' 在构建时获取这些消息日志。 Google的问题读取这些线程,通过在gradle文件中添加忽略重复文件提供了解决方案,在android{}中添加。 问题还在?问题是我将如何知道哪些依赖项或文件是复制或制造问题而构建。我无法使用上面的生成日志跟踪该文件。

  • 问题内容: 我想知道当前的日期和时间。 代码 表示运行程序的系统的日期和时间,并且系统日期可能是错误的。 那么,无论运行哪个程序的系统日期和时间,有什么方法可以获取正确的当前日期和时间? 问题答案: 如果您在互联网上,则可以询问一个已知且受信任的时间源。如果运行您的程序的人希望阻止您的程序执行此操作(例如,如果您给他们授予了限时许可证,而他们又不想花更多的时间),那么他们可能会欺骗或阻止该连接。