我编写了一个自定义gradle任务类(比如PrintNameTask
),它接受一些输入参数(比如name
)。
然后,如果我定义类似printName
的{{1}}任务,如下所示:
PrintNameTask
并从命令提示符调用它,如下所示,我可以看到打印出的传递名称
task printName(type: PrintNameTask) {
name = project.name
}
但是,如果我调用$gradle printName -Pname=myName
myName
或clean
之类的任何其他任务,则构建失败,因为没有传递称为build
的属性。这是公平的,因为我的name
是一个配置闭包,并且一直在进行评估。
为了解决这个问题,我尝试将配置闭包更改为如下所示的任务操作闭包:
printName
但是没办法让它发挥作用。我尝试了project.name,getProperty(“name”)和其他一些组合,但没有任何效果。我得到的全部是:
task printName(type: PrintNameTask) << {
// What should I put on here?
name = ???
// or
name ???
}
这种要求在我看来非常基本,有些令人沮丧的是,大量的书籍和文档都已发布,但它们只显示了一些简单的例子。也许只是我,但在提出这个问题的时候,我最初的学习热情已经超过了一半。无论如何,请提前感谢您的意见。
答案 0 :(得分:1)
按以下方式配置任务:
task printName(type: PrintNameTask) {
name = project.hasProperty('name') ? project.name : '' // or null
}
由于在配置阶段对此闭包进行评估,因此每次处理脚本时都会执行此闭包。您只需要检查房产是否存在。