从命令提示符将 属性 传递给自定义 gradle 任务
Passing property to custom gradle task from command prompt
我写了一个自定义 gradle 任务 class(比如 PrintNameTask
)接受一些输入参数(比如 name
)。
然后如果我定义 PrintNameTask
类型的 printName
任务,如下所示:
task printName(type: PrintNameTask) {
name = project.name
}
并从命令提示符下调用它,如下所示我可以看到传递的名称打印出来
$gradle printName -Pname=myName
myName
但是,如果我调用任何其他任务,如 clean
或 build
,构建将失败,因为没有 属性 调用 name
通过。这很公平,因为我的 printName
是一个配置闭包,并且一直在评估。
为了解决这个问题,我尝试将配置闭包更改为任务操作闭包,如下所示:
task printName(type: PrintNameTask) << {
// What should I put on here?
name = ???
// or
name ???
}
但是没有办法让它工作。我尝试了 project.name、getProperty("name") 和其他一些组合,但没有任何效果。我得到的只是:
* What went wrong:
A problem was found with the configuration of task ':printName'.
No value has been specified for property 'name'.
这种要求在我看来很基本,让人有点沮丧的是,出版了大量的书籍和文档,但它们只展示了一些微不足道的例子。也许只有我一个人,但在问这个问题时,我最初的 gradle 热情已经消失了一半以上。无论如何,提前感谢您的投入。
按以下方式配置任务:
task printName(type: PrintNameTask) {
name = project.hasProperty('name') ? project.name : '' // or null
}
由于此闭包是在配置阶段评估的,因此每次处理脚本时都会执行它。您只需要检查 属性 是否存在。
我写了一个自定义 gradle 任务 class(比如 PrintNameTask
)接受一些输入参数(比如 name
)。
然后如果我定义 PrintNameTask
类型的 printName
任务,如下所示:
task printName(type: PrintNameTask) {
name = project.name
}
并从命令提示符下调用它,如下所示我可以看到传递的名称打印出来
$gradle printName -Pname=myName
myName
但是,如果我调用任何其他任务,如 clean
或 build
,构建将失败,因为没有 属性 调用 name
通过。这很公平,因为我的 printName
是一个配置闭包,并且一直在评估。
为了解决这个问题,我尝试将配置闭包更改为任务操作闭包,如下所示:
task printName(type: PrintNameTask) << {
// What should I put on here?
name = ???
// or
name ???
}
但是没有办法让它工作。我尝试了 project.name、getProperty("name") 和其他一些组合,但没有任何效果。我得到的只是:
* What went wrong:
A problem was found with the configuration of task ':printName'.
No value has been specified for property 'name'.
这种要求在我看来很基本,让人有点沮丧的是,出版了大量的书籍和文档,但它们只展示了一些微不足道的例子。也许只有我一个人,但在问这个问题时,我最初的 gradle 热情已经消失了一半以上。无论如何,提前感谢您的投入。
按以下方式配置任务:
task printName(type: PrintNameTask) {
name = project.hasProperty('name') ? project.name : '' // or null
}
由于此闭包是在配置阶段评估的,因此每次处理脚本时都会执行它。您只需要检查 属性 是否存在。