gpt4 book ai didi

gradle - 我如何在 Gradle 任务上使用 inputs.property,但有一个值的闭包?

转载 作者:行者123 更新时间:2023-12-03 02:54:06 25 4
gpt4 key购买 nike

我正在尝试将安装程序生成器添加到我的构建配置中,但在正确设置任务输入时遇到了一些麻烦。我将配置拆分为一个单独的 .gradle 文件,然后通过执行以下操作将其添加到我的项目中。

project.ext.i4jArgs = [ "--verbose" ]
apply from: rootProject.projectDir.absolutePath + "/gradle/install4j.gradle"

为了构建安装程序,我通过 exec 调用命令行工具.几乎所有内容都基于约定,但我想有选择地向我的主构建文件中的命令添加几个参数/开关。我使用 project.ext.i4jArgs 来做到这一点属性(上图)。

如果我设置 project.ext.i4jArgs在申请我的属性(property)之前 install4j.gradle文件,我可以使用以下输入,一切似乎都有效。

inputs.property("i4jArgs", project.ext.has('i4jArgs') ? project.ext.i4jArgs : null)

但是,如果我应用我的 install4j.gradle首先文件并设置project.ext.i4jArgs属性(property)二、project.ext.i4jArgs属性始终为 null当我在我的任务中声明输入时(很明显)。 API TaskInputs (here)说我可以将闭包作为值传递。有没有一种方法可以使用闭包来延迟对 project.ext.i4jArgs 的评估?足够长的时间来保证它已被初始化?我虽然以下会起作用,但永远不会调用闭包。

inputs.property("i4jArgs", {
project.afterEvaluate {
println "has args ${project.ext.has('i4jArgs')}"
project.ext.has('i4jArgs') ? project.ext.i4jArgs : null
}
})

我知道编写一个支持我想要的所有配置的插件对于我给出的特定示例来说可能是更好的选择,但无论如何我想弄清楚我在这里误解了什么。

最佳答案

我会在第一个闭包中删除 project.afterEvaluate。这是为了添加一个在配置项目后执行的闭包。

实际发生的事情是当 gradle 解析输入时,它调用第一个闭包,然后调用 project.afterEvaluate,它向列表添加一个闭包,当项目被调用时完成配置...永远不会被调用,因为它现在处于执行阶段。

关于gradle - 我如何在 Gradle 任务上使用 inputs.property,但有一个值的闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com