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

Mur*_*hna 11 java groovy gradle build.gradle java-12

当我尝试使用Gradle 构建具有开关表达式的 Java代码时,会引发以下错误:

error: switch expressions are a preview feature and are disabled by default.
Run Code Online (Sandbox Code Playgroud)

我尝试运行./gradlew build --enable-preview也不起作用。

我正在使用Gradle 5.3.1。

Ale*_*ech 20

目前似乎没有一个地方可以定义它。您应该为所有任务类型(编译、测试运行时或 java exec 相关任务)执行此操作。我发现自己完全覆盖:

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

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

tasks.withType(JavaExec) {
    jvmArgs += '--enable-preview'
}
Run Code Online (Sandbox Code Playgroud)

  • 例如,“JavaExec”部分对于 Spring Boot 应用程序很有用。 (2认同)

JB *_*zet 13

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

这样的事情应该起作用:

tasks.withType(JavaCompile).each {
    it.options.compilerArgs.add('--enable-preview')
}
Run Code Online (Sandbox Code Playgroud)

要运行应用程序/测试,我们需要添加jvmArgs

例:

test {
    jvmArgs(['--enable-preview'])
}
Run Code Online (Sandbox Code Playgroud)

  • 由于我包含了 [应用程序插件](https://docs.gradle.org/current/userguide/application_plugin.html),我使用 `applicationDefaultJvmArgs += ["--enable-preview"]` 而不是 `test {jvmArgs (['--enable-preview'])}`。 (2认同)

ben*_*lor 9

这是另一个使用 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")
}

Run Code Online (Sandbox Code Playgroud)