我编写了一个插件(目前只存在于buildSrc中),它创建了几个名称基于用户提供的值的任务。我怎样才能使它们在运行应用插件的构建脚本时执行?它不需要在执行阶段的任何特定点运行。
答案 0 :(得分:2)
首先,您将学习基本的Gradle概念。 Gradle 任务不适用于在每个Gradle调用上运行。如果您确实需要在每个Gradle调用上运行代码,请在配置阶段中直接执行它,而不是将其包含在任务中。
但是,在Gradle版本上运行任务有两个原因:
settings.startParameter.taskNames
修改)dependsOn
/ finalizedBy
)当然,您可以使用其中一种方法绕过Gradle并在每次构建时执行任务(@mkobit使用第二种方法),但由于您的插件基本上会违反基本的Gradle原则,解决方案可能在将来某个时间或更复杂的项目中失败(因为插件应该是可重用的)。
总结一下,我建议使用常量名称将所有生成的任务捆绑在一个任务中,以便用户可以通过在settings.gradle
文件中放置一行来轻松地在每个Gradle调用上运行任务:
startParameter.taskNames.add '<bundleTask>'
答案 1 :(得分:0)
您可以通过all
上的TaskCollection
方法为{(1}}}中的所有(或某些)任务添加dependsOn
/ finalizedBy
关系。项目
根据myTask
中的每个任务创建单个allproject
的示例:
class MyPlugin implements Plugin<Project> {
void apply(final Project project) {
final myTask = project.tasks.create('myTask')
project.allprojects.each { proj ->
proj.tasks.all {
// Make sure to not add a circular dependency
if (it != myTask) {
it.dependsOn(myTask)
}
}
}
}
}