我正在尝试将安装程序构建器添加到我的构建配置中,但在正确设置任务输入时遇到了一些麻烦。我将配置拆分为一个单独的 .gradle 文件,然后通过执行以下操作将其添加到我的项目中。
project.ext.i4jArgs = [ "--verbose" ]
apply from: rootProject.projectDir.absolutePath + "/gradle/install4j.gradle"
为了构建安装程序,我通过exec
. 几乎所有内容都基于约定,但我想从我的主构建文件中选择添加几个参数/开关到命令。我使用该project.ext.i4jArgs
属性(上图)。
如果我project.ext.i4jArgs
在应用我的文件之前设置属性install4j.gradle
,我可以使用以下输入,一切似乎都有效。
inputs.property("i4jArgs", project.ext.has('i4jArgs') ? project.ext.i4jArgs : null)
但是,如果我install4j.gradle
首先应用我的文件并设置project.ext.i4jArgs
属性,那么project.ext.i4jArgs
属性总是null
在我在我的任务中声明输入时(显然)。TaskInputs
(here)的 API说我可以将闭包作为值传递。有没有办法可以使用闭包来延迟评估project.ext.i4jArgs
足够长的时间以保证它已被初始化?我虽然以下方法会起作用,但永远不会调用闭包。
inputs.property("i4jArgs", {
project.afterEvaluate {
println "has args ${project.ext.has('i4jArgs')}"
project.ext.has('i4jArgs') ? project.ext.i4jArgs : null
}
})
我知道编写一个支持我想要的所有配置的插件对于我给出的特定示例可能是一个更好的选择,但无论如何我想弄清楚我在这里误解了什么。