【发布时间】:2019-04-06 17:01:03
【问题描述】:
我正在尝试使用 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”程序,这有到目前为止似乎非常困难。)。
任何帮助将不胜感激。
【问题讨论】:
-
注意:为避免混淆任何人,“Kotlin 等效于第一部分”实际上更正确的是
tasks.named<JavaCompile>('compileJava'){ ... },它只会影响具有给定名称的一个特定 JavaCompile 任务,而不是所有任务(例如,“compileTestJava”任务也可能存在并具有 JavaCompile 类型。
标签: gradle javafx java-11 gradle-kotlin-dsl javafx-11