【问题标题】:How to enable Java 12 preview features with Gradle?如何使用 Gradle 启用 Java 12 预览功能?
【发布时间】:2019-10-21 17:32:35
【问题描述】:

当我尝试使用 Gradle 构建具有 switch expressions 的 Java 代码时,它会抛出此错误:

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

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

我正在使用 Gradle 5.3.1。

【问题讨论】:

    标签: java gradle groovy build.gradle java-12


    【解决方案1】:

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

    这样的事情应该可以工作:

    tasks.withType(JavaCompile).each {
        it.options.compilerArgs.add('--enable-preview')
    }
    

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

    例子:

    test {
        jvmArgs(['--enable-preview'])
    }
    

    【讨论】:

    • 如果我必须运行应用程序或运行测试,我必须添加这个test { jvmArgs(['--enable-preview']) } run { jvmArgs(['--enable-preview']) }
    • 因为我包含了application plugin,所以我使用applicationDefaultJvmArgs += ["--enable-preview"] 而不是test {jvmArgs(['--enable-preview'])}
    【解决方案2】:

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

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

    【讨论】:

    • JavaExec 部分对于例如 Spring Boot 应用程序很有用。
    • 对于bootRun 是的,但在您使用简单的application 插件时也很有用。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2021-11-05
      • 2022-11-10
      • 2020-07-02
      • 2020-07-14
      相关资源
      最近更新 更多