从命令提示符将属性传递给自定义gradle任务

时间:2015-07-15 05:40:00

标签: gradle build.gradle

我编写了一个自定义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 ???
}

这种要求在我看来非常基本,有些令人沮丧的是,大量的书籍和文档都已发布,但它们只显示了一些简单的例子。也许只是我,但在提出这个问题的时候,我最初的学习热情已经超过了一半。无论如何,请提前感谢您的意见。

1 个答案:

答案 0 :(得分:1)

按以下方式配置任务:

task printName(type: PrintNameTask) {
    name = project.hasProperty('name') ? project.name : '' // or null
}

由于在配置阶段对此闭包进行评估,因此每次处理脚本时都会执行此闭包。您只需要检查房产是否存在。