Gradle 8:如何在运行时设置java版本

vs91vp4v  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(306)

在Gradle 7之前,我可以在构建脚本中使用以下代码块来触发Gradle独立于运行时JDK使用特定的Java版本(在本例中为java11):

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

多亏了这个块,我可以编译我的项目,即使org.gradle.java.home指向我的jdk17路径。
升级到Gradle 8.1.1后,我收到以下错误消息:

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\dev\workspace\foo\bar\build.gradle' line: 25

* What went wrong:
A problem occurred evaluating project ':baz'.
> The value for property 'languageVersion' is final and cannot be changed any further.

更糟糕的是,official Gradle documentation建议使用我的确切代码片段来解决这个问题,这显然行不通。
除了设置“java.sourceCompatibility = JavaVersion.VERSION_11”之外,我找不到任何工作代码片段,这不允许我在不首先将org.gradle.java.home更改为指向jdk11的情况下进行编译。

avwztpqn

avwztpqn1#

我有:

------------------------------------------------------------
Gradle 8.1.1
------------------------------------------------------------

Build time:   2023-04-21 12:31:26 UTC
Revision:     1cf537a851c635c364a4214885f8b9798051175b

Kotlin:       1.8.10
Groovy:       3.0.15
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          11.0.12 (Azul Systems, Inc. 11.0.12+7-LTS)
OS:           Windows 10 10.0 amd64

我在下面的build.gradle中尝试了你的代码片段,构建结果是“成功”:

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

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

test {
    useJUnitPlatform()
}

相关问题