gpt4 book ai didi

properties - Gradle额外属性在子项目中定义的自定义任务中不可见

转载 作者:行者123 更新时间:2023-12-03 13:24:35 27 4
gpt4 key购买 nike

我正在尝试在多个Gradle任务中重用常见的逻辑,类似于this answer中建议的那样,但是我在无法看到额外的项目属性时遇到了麻烦。

归根结底,这就是问题所在。假设我有一个Gradle根构建脚本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

请注意,这在以下情况下似乎可行:
  • 自定义任务是在根项目中与额外属性
  • 一起定义的
  • (如果您使用动态属性而不是其他属性),但是不推荐使用
  • 最佳答案

    在构建脚本中读取名为foo的额外属性的推荐语法为fooproject.foo(而不是ext.foo),它们还将搜索父项目的(额外)属性。编辑:在任务类中,您可以使用project.foo

    重要的是要注意,额外的属性仅用于构建脚本中的临时脚本。任务类和插件不应使用它们。任务类根本不应该扩展到Gradle对象模型中。相反,它应该声明属性(以及必要时使用的方法),这些属性允许构建脚本和/或插件向其提供所需的所有信息。这样可以更轻松地理解,重用和记录任务类,并可以通过@Input...@Output...批注声明输入和输出。

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

    关于properties - Gradle额外属性在子项目中定义的自定义任务中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530901/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com