如何在Gradle构建中指定所需的Java版本

pdi*_*aso 13 java gradle

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

这可能吗 ?

dhf*_*fsk 15

TLDR; 谢谢@franklin-yu"targetCompatibility ='1.7' - >你的用户可以用8编译并用7运行."

请参阅Gradle,"sourceCompatibility"与"targetCompatibility"?

targetCompatibility = '1.7' 为Java 7做了诀窍

使用sourceCompatibility = '1.7'的语言水平

  • 另外,如果未指定`targetCompatibility`,则默认为`sourceCompatibility`. (2认同)
  • 不,这些选项设置目标源代码和字节码兼容性。我需要指定用于执行编译的 JDK 版本。 (2认同)
  • `BiFunction`是Java 8 JDK的新增功能.如果您的项目依赖于该类,则无法在<Java 8 JRE上运行. (2认同)

Cle*_*usW 13

此功能刚刚作为Java 工具链添加到 Gradle 6.7 中:

// build.gradle.kts

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

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Ros*_*res 6

你可以试试这个:

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

tasks.withType<JavaCompile> {
    options.compilerArgs.addAll(arrayOf("--release", "8"))
}
Run Code Online (Sandbox Code Playgroud)

这也将为您提供 JDK 合规性。您还可以看到以下相关问题:


Pie*_*345 6

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

sourceCompatibility = '1.8'
targetCompatibility = '1.8'
Run Code Online (Sandbox Code Playgroud)

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

来源