如何使用Gradle启用Java 12预览功能?

30

当我尝试使用Gradle构建具有switch表达式的Java代码时,它会抛出以下错误:

error: switch expressions are a preview feature and are disabled by default.

我尝试运行./gradlew build --enable-preview,但也没有成功。

我正在使用Gradle 5.3.1。

3个回答

37

您需要配置JavaCompile任务,以便在编译时Gradle将此选项传递给Java编译器。

像这样的内容应该可以工作:

tasks.withType(JavaCompile).each {
    it.options.compilerArgs.add('--enable-preview')
}
运行应用程序/测试需要添加 jvmArgs
示例:
test {
    jvmArgs(['--enable-preview'])
}

1
如果我要运行应用程序或运行测试,我必须添加以下内容:test { jvmArgs(['--enable-preview']) } run { jvmArgs(['--enable-preview']) } - Murali Krishna
2
由于我包含了应用程序插件,所以我使用applicationDefaultJvmArgs += ["--enable-preview"]而不是test {jvmArgs(['--enable-preview'])} - Matthias Braun

29

目前似乎没有一个单一的地方来定义它。您应该为所有任务类型(编译、测试运行时或Java执行相关任务)都进行定义。我发现自己完全掌握了:

tasks.withType(JavaCompile) {
    options.compilerArgs += "--enable-preview"
}

tasks.withType(Test) {
    jvmArgs += "--enable-preview"
}

tasks.withType(JavaExec) {
    jvmArgs += '--enable-preview'
}

2
“JavaExec” 部分对于 Spring Boot 应用程序非常有用。 - GuanacoBE
1
是的,对于 bootRun 来说非常有用,但在使用简单的 application 插件时也很实用。 - Aleksander Lech

12

下面是另一种使用Gradle Kotlin DSL在build.gradle.kts中使用的版本:

plugins {
    `java-library`
}

repositories {
    mavenCentral()
}

java {
    sourceCompatibility = JavaVersion.VERSION_12
}

tasks.withType<JavaCompile> {
    options.compilerArgs.add("--enable-preview")
}
tasks.test {
    useJUnitPlatform()
    jvmArgs("--enable-preview")
}

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.4.2")
    testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.2")
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接