我正在尝试创建我的第一个Gradle插件
1.添加属性的扩展名:project.extensions.create("abc", AbcExtension)
2.定义复制任务。当我按照以下方式定义任务时
project.task("abcTask", type: Copy) {
from project.abc.fromPath
into project.abc.intoPath
}
project.abc.fromPath等于AbcExtension.fromPath
值 - 它不会读取build.gradle
的值。
当我按照以下方式定义任务时
project.task("abcTask", type: Copy) << {
from project.abc.fromPath
into project.abc.intoPath
}
它始终打印UP-TO-DATE
并且不运行任务。
请解释一下这种行为,并告诉我在Gradle插件中定义任务的正确方法是什么(type
和dependsOn
functionallity
答案 0 :(得分:12)
插件必须推迟每次读取可变构建模型值(即可以从构建脚本设置的任何内容),直到至少结束配置阶段。有几种方法可以实现这一目标。其中包括:
Copy.from
)project.afterEvaluate {}
或gradle.projectsEvaluated {}
为手头的工作选择最佳选择需要一些专业知识。 (可能有助于研究Gradle codebase中的一些插件。)在您的情况下,我可能会执行以下操作:
project.task("abcTask", type: Copy) {
from { project.abc.fromPath }
into { project.abc.intoPath }
}
您的<<
版本不起作用,因为它太晚配置Copy
任务。一般来说,所有配置都应该在配置阶段进行,而不是在执行阶段进行。您可以在Gradle User Guide中了解有关Gradle构建阶段的更多信息。