如何使我的Gradle插件自动执行其任务?
我编写了一个插件(目前只存在于buildSrc中),它创建了几个任务,这些任务的名称基于用户提供的值。我如何使它们在应用插件的构建脚本运行时执行?它不需要在执行阶段的任何特定点运行。实现这一点的一种方法是使用如何使我的Gradle插件自动执行其任务?,gradle,gradle-plugin,Gradle,Gradle Plugin,我编写了一个插件(目前只存在于buildSrc中),它创建了几个任务,这些任务的名称基于用户提供的值。我如何使它们在应用插件的构建脚本运行时执行?它不需要在执行阶段的任何特定点运行。实现这一点的一种方法是使用TaskCollection上的all方法向项目中的所有(或部分)任务添加/关系 创建单个myTask的示例,其中allproject中的每个任务取决于它: classmyplugin实现插件{ 无效申请(最终项目){ final myTask=project.tasks.create('m
TaskCollection
上的all
方法向项目中的所有(或部分)任务添加/关系
创建单个myTask
的示例,其中allproject
中的每个任务取决于它:
classmyplugin实现插件{
无效申请(最终项目){
final myTask=project.tasks.create('myTask'))
project.allprojects.each{proj->
项目任务。全部{
//确保不要添加循环依赖项
if(it!=myTask){
it.dependsOn(我的任务)
}
}
}
}
}
首先,您要围绕一个基本的渐变概念展开工作。Gradle任务并非设计为在每次Gradle调用上运行。如果您确实需要在每个Gradle调用上运行代码,请在配置阶段直接执行它,而不是将其包装到任务中
但是,任务在Gradle构建上运行有两个原因:
- 直接选择(通过命令行或
修改)设置.startParameter.taskNames
- 通过一个或多个任务依赖项(
/dependsOn
)finalizedBy
设置中放入一行,在每次Gradle调用中轻松运行任务。Gradle
文件:
startParameter.taskNames.add '<bundleTask>'
startParameter.taskNames.add''
首先,为什么要这样做?你想达到什么目标?第二,在构建中,您希望何时运行它们?最后?他们有依赖关系吗?或任何输入?还是取决于特定类型的任务?或者这些任务依赖于它吗?有很多方法可以做到这一点,但这取决于你想完成什么。@mkobit这是一个Android项目,重要的是任务在应用程序启动之前完成。这几乎不是一个限制,因为我很确定Gradle甚至不负责推送和启动应用程序。没有依赖项或输入,它们是完全独立的。即使没有连接任何设备,或者当前任务甚至不是构建(例如,clean),它们也可以运行。如果可能,我希望在插件中运行任务的代码,而不是构建脚本。“如果可能,我希望在插件中运行任务的代码,而不是构建脚本。”在构建脚本中所能做的一切都可以在插件中实现。下面是一个非常好的真实示例,说明如何在Android项目中实现这一点:感谢您的清晰解释。我不知道设置。启动参数。任务名。我真的很喜欢这个想法。我添加了一个关于如何解决您的具体问题的建议。谢谢,这似乎是一个非常可靠的解决方案。我想我要走那条路。我有一部分人想在配置阶段运行我的代码,但这感觉有点“错误”。回答得好,我同意这里的一切。在某些用例中,您确实希望始终运行任务(例如报告、度量等),但在大多数情况下,您希望根据输入和输出以及它们之间的依赖关系来组织任务。