Gradle Kotlin DSL 等效于 Groovy DSL 'run' ?

标签 gradle javafx java-11 gradle-kotlin-dsl javafx-11

我正在尝试使用 Gradle,按照说明 here 使用 Kotlin 和 Java 11 构建一个简单的 JavaFX 11 程序.但是,此页面使用 Gradle 的 Groovy DSL,我正在尝试使用 Kotlin DSL。令人惊讶的是,我的 Google 搜索没有找到将每个 Groovy 构造映射到其等效的 Kotlin 构造的文档,或者一般解释如何将 Groovy DSL 代码转换为等效的 Kotlin DSL 代码。 (这似乎是 Gradle 文档中的一个重大疏忽!)。

特别是,本文档包含以下 Groovy 代码:

compileJava {
    doFirst {
        options.compilerArgs = [
            '--module-path', classpath.asPath,
            '--add-modules', 'javafx.controls'
        ]
    }
}

run {
     doFirst {
         jvmArgs = [
             '--module-path', classpath.asPath,
             '--add-modules', 'javafx.controls'
         ]
    }
}

据我所知,相当于第一部分的 Kotlin 似乎是:
tasks.withType<JavaCompile> {
    options.compilerArgs.addAll(arrayOf(
        "--module-path", classpath.asPath,
        "--add-modules", "javafx.controls"
    ))
}

但是,我无法弄清楚与第二部分等效的 Kotlin DSL 是什么。请注意,'run' 是 Kotlin 标准库中的标准函数扩展,因此在 Kotlin DSL 中,此代码的 Kotlin 版本似乎不能出于相同目的使用名称 'run'。

(注意:我考虑过尝试使用插件来支持 JavaFX(例如,如 this 页面所述),但该插件似乎使用起来相当复杂,而且我已经遇到了足够多的复杂问题我很犹豫是否要在其中引入一个文档很少的开源插件。我现在真的正在尝试在 JavaFX/Gradle 中生成最简单的“Hello, World”程序,到目前为止这似乎出乎意料的困难。)。

任何帮助,将不胜感激。

最佳答案

使用配置避免 API,相当于第二个 block 是:

tasks.named<JavaExec>("run") {
    doFirst {
        jvmArgs = listOf("--module-path", classpath.asPath,"--add-modules", "javafx.controls")
    }
}

关键是 run 有 JavaExec类型,就像任何任务的类型一样,可以通过创建一个任务来打印您然后运行的任务的类来发现:
tasks.register("getName") {
    doFirst {
        print("Class name: ${tasks["run"].javaClass}")
    }
}

请注意,随着 JavaFX 应用程序的增长,您将需要指定额外的模块,如下所示:
tasks.named<JavaExec>("run") {
    doFirst {
        jvmArgs = listOf("--module-path", classpath.asPath,
            "--add-modules", "javafx.base,javafx.controls,javafx.graphics")
    }
}

关于Gradle Kotlin DSL 等效于 Groovy DSL 'run' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53118756/

相关文章:

android - 如何在没有Internet和/或没有Gradle的情况下使用Mapbox Android SDK

java - JavaFX卡住窗口

java - 尝试替换场景内容时JavaFx中的指针异常

kotlin - 无法加载类 'kotlin.coroutines.Continuation'

gradle - bintray创建目录声称上传了工件,但它是空白的

spring-mvc - Spring4 MVC无法识别JSPS

JavaFX 整数微调器 (IntegerSpinnerValueFactory) 不会将值环绕到最小值

用于 SQL 数据库访问的 JavaFX TableView - 有多少工厂?

Java 11 不可变映射 : create Map. 条目

java - 打开jdk11 : Unsupported CipherSuite Exception