【问题标题】:How specify the required Java version in a Gradle build如何在 Gradle 构建中指定所需的 Java 版本
【发布时间】:2015-03-07 20:07:44
【问题描述】:

我想在 Gradle 构建文件中设置所需的 Java 版本,例如7 或 8 不必指定本地 JDK 安装的实际路径。

这可能吗?

【问题讨论】:

标签: java gradle


【解决方案1】:

TLDR; 感谢@franklin-yu “targetCompatibility = '1.7' -> 您的用户可以使用 8 编译并使用 7 运行。”

Gradle, "sourceCompatibility" vs "targetCompatibility"?

targetCompatibility = '1.7' 可以解决例如Java 7

语言级别使用sourceCompatibility = '1.7'

【讨论】:

  • 另外,如果未指定targetCompatibility,则默认为sourceCompatibility
  • 否,这些选项设置目标源代码和字节码的兼容性。我需要指定用于执行编译的 JDK 版本。
  • Gradle 使用它在您的 PATH 中找到的 JDK,选择不同的一组 JAVA_HOME 到所需的路径
  • BiFunction 是 Java 8 JDK 的新增功能。如果您的项目依赖于该类,则它不能在 上运行
  • @Paulecci,如果您的build.gradle 中有targetCompatibility = '1.7',您的用户可以使用 8 编译并使用 7 运行。
【解决方案2】:

这个功能是 just added 到 Gradle 6.7 作为Java toolchains

// build.gradle.kts

plugins {
    id("java-library") // or id("application")
}

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

有了这个,Gradle 将自动下载并使用指定 Java 版本的适当 JDK(默认使用 AdoptOpenJDK)。

【讨论】:

  • 您知道如何选择 JDK 的特定修订版,例如 Java 8 修订版 261?我找不到 JavaLanguageVersion 的文档。 :-(
  • 没关系。我找到了docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/…。好像目前是不可能的。但 Gradle 的底层基础架构似乎已准备好获取特定修订版。我收到以下异常:“无法下载工具链。这可能表明请求的 JDK 不可用。”
【解决方案3】:

你可以试试这个:

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

tasks.withType<JavaCompile> {
    options.compilerArgs.addAll(arrayOf("--release", "8"))
}

这也将使您遵守 JDK。您还可以看到以下相关问题:

【讨论】:

    【解决方案4】:

    build.gradle文件中,添加以下两行:

    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
    

    targetCompatibility 定义生成的 JVM 字节码版本(这是您的应用程序用户需要的版本)。 sourceCompatibility 定义了允许哪些源代码构造(例如,您需要 Java 1.8 或更高版本才能在源代码中使用 lambda 表达式)。

    Source

    【讨论】:

      【解决方案5】:

      基于 CletusW 的回答。在windows 10中,好像不会自动选择新安装的Java,所以我手动检查一下。

      apply plugin: 'java'
      java.toolchain.languageVersion = JavaLanguageVersion.of(15)  // auto install
      
      
      
      // check JDK version
      if (!System.getProperty("java.home").contains(java.toolchain.languageVersion.get().toString())) {
          def msg = ('JDK in this project: ' + System.getProperty('java.home') + '\n' +
                  'In this project, you should use JDK-' + java.toolchain.languageVersion.get())
          throw new GradleException(msg)
      }
      
      

      【讨论】:

      • 我有 Gradle 7.2,自动下载刚刚开始。我不喜欢,因为我想检查正在使用的 Java 或使用现有的安装版本。
      猜你喜欢
      • 2018-03-30
      • 2015-06-03
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2018-09-26
      • 2015-08-14
      相关资源
      最近更新 更多