摇篮额外属性中的一个子项目中定义的自定义任务不可见(Gradle extra properties

2019-08-08 07:02发布

我想重新使用在多个摇篮任务,类似于在建议常见逻辑这个答案 ,但我有与不可见的额外项目属性的麻烦。

归结,这里的问题。 说我有一个根摇篮构建脚本, build.gradle ,设置一个额外的项目性质,

project.ext.myProp = 'myValue'

我在定义一个子项目settings.gradle

include 'subproject'

和子项目定义并使用引用该项目的额外属性自定义任务,

class CustomTask extends DefaultTask {
    CustomTask() {
        doFirst {
            println project.ext.myProp
        }
    }
}

task custom(type: CustomTask) {
    println 'custom task'
}

执行这给了我这样的:

FAILURE: Build failed with an exception.
...
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':subproject'.
...
Caused by: org.gradle.api.tasks.TaskInstantiationException: Could not create task of type 'CustomTask'.
...
Caused by: groovy.lang.MissingPropertyException: cannot get property 'myProp' on extra properties extension as it does not exist
...

BUILD FAILED

请注意,这似乎如果工作:

  • 自定义任务在根项目中定义旁边的额外的属性
  • 如果你使用的动态属性,而不是额外的属性,但这些已被弃用

Answer 1:

读一个额外的属性命名的推荐语法foo在构建脚本是fooproject.foo (而不是ext.foo ),这也将搜索父项目(额外)的属性。 编辑:在任务类,你可以使用project.foo

需要注意的是额外的属性仅仅意味着在构建脚本的ad-hoc脚本是很重要的; 任务类和插件应该使用它们。 任务类不应该伸手到摇篮对象模型在所有; 相反,它应该(如果必要的话,并且,方法)声明属性允许构建脚本和/或插件有它需要的所有信息提供它。 这使得它更容易理解,重用,并记录任务类,并有可能通过声明输入和输出@Input...@Output...注释。

PS:而不是调用的doFirst在构造函数中,任务类通常有带注释的方法@TaskAction



文章来源: Gradle extra properties not visible in a custom task defined in a subproject