繁体   English   中英

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

[英]How do I specify the required Java version in a Gradle build?

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

这可能吗?

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

// build.gradle.kts

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

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

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

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

请参阅Gradle,“sourceCompatibility”与“targetCompatibility”?

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

使用sourceCompatibility = '1.7'作为语言级别

你可以试试这个:

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

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

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

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

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

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

资源

基于 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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM