Groovy DSL 'run' 的 Gradle Kotlin DSL 等效项?

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

我正在尝试使用 Gradle 使用 Kotlin 和 Java 11 构建一个简单的 JavaFX 11 程序,按照说明 here .但是,此页面使用 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 版本似乎无法在 Kotlin DSL 中出于相同目的使用名称“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")
    }
}

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

相关文章:

groovy - 使用动态对象组配置 gradle 插件扩展的正确方法

java - .java 使用或覆盖已弃用的 API。注意 : Recompile with -Xlint:deprecation for details

android - 哪个变量包含在gradle/android中包含其基本名称的apk路径?

multithreading - 定时器和javafx

Java 11 根据枚举值选择一种方法应用于流

java - 需要有关 Drools -version 7.X 与 java 11 兼容性的更多信息

java - Paths.get 与 Path.of

gradle - Gradle 配置依赖和 Gradle 配置传入依赖有什么区别?

JavaFX 表更新线程架构不匹配

java - 修改 TableView 中的单元格及其内容