当前位置: 首页 > 知识库问答 >
问题:

Groovy DSL“运行”的Gradle Kotlin DSL等价物?

贺俊材
2023-03-14

我试图按照这里的说明,使用Gradle,用Kotlin和Java 11构建一个简单的JavaFX11程序。但是,这个页面使用的是Gradle的Groovy DSL,而我正在尝试使用Kotlin DSL。令人惊讶的是,我在谷歌搜索时没有找到一个文档,将每个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的插件(例如,如本页所述),但该插件似乎使用起来相当复杂,而且我已经在这个项目中遇到了足够多的复杂问题,以至于我不太愿意引入一个文档很少的开源插件。目前我确实在尝试用JavaFX/Gradle生成尽可能简单的“Hello,World”程序,但到目前为止,这似乎出奇地困难。)。

如有任何帮助,我们将不胜感激。

共有1个答案

罗茂实
2023-03-14

使用配置避免API,与第二个块等效的是:

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")
    }
}
 类似资料:
  • 等价 cljs 的数据结构是在 js 基础之上实现的. 数值类型的数据可以直接判断. 一般通过 (= a b) 判断 a 和 b 的内容是否一致. Collection 类型数据除了 = 函数之外, 还可以使用 identical? 函数判断两个数据的引用是否一致. (identical? {} {}) ; true (identical? {:a 1} {:a 1}) ; false (= {:

  • 我正在使用Java SDK在HarmonyOS中创建一个自定义组件,在那里我必须在组件实例延迟后执行一些任务。 在Android中,我们在View类中有方法。因此,我们可以实现以下要求 但是,在HMOS java SDK中,我看到组件类中没有任何可用于延迟的api。 所以,我的问题是 harmonyos中view.postdelayed(可运行的操作,长延迟)的等价物是什么?

  • 我是WPF技术的新手。我已经在WinForms开发了大约6年。 现在我想通过学习WPF来提高我的技能一大步。我正在阅读MSDN中的介绍指南,同时作为个人练习,我试图将WinForms UI的sructure转换为其WPF UI的等价物。 这是我想在WPF中重现的WinForms控件结构的简单模型: 我的问题:有人可以指导我或给我一个简短的例子,我如何可以添加一个下拉按钮的东西在工具栏?。

  • Intellij中的等效快捷方式是什么?

  • 我已经看了好几次留档了,看了来源,都没用。 我在寻找与PHPUnit的“this”相同的Codeception- 根据文档,就像这应该是可行的,但它不是“未定义的方法”。我必须激活哪个助手、模块或其他什么?