如何创建Gradle任务以调用多个子任务并支持同一任务多参数重复执行
问题原因
你的写法存在两个核心错误:
GradleBuild类型任务的tasks、startParameter属于配置项,需要在配置阶段完成赋值,放在doLast执行阶段赋值不会生效,还会触发任务配置逻辑异常。- 嵌套使用
GradleBuild类型任务(用GradleBuild任务调用另一个GradleBuild任务)会重复引入当前项目的构建上下文,因此抛出构建路径重复的错误。
可行解决方案
直接声明两个独立的 GradleBuild 任务分别对应不同参数的test1调用,再用普通聚合任务依赖这两个任务即可,示例代码如下:
// 调用test1并传入param=A task testA(type: GradleBuild) { tasks = ['test1'] // 配置阶段直接指定参数,不要放在doLast内 startParameter.projectProperties = gradle.startParameter.projectProperties + ['param': 'A'] } // 调用test1并传入param=B task testB(type: GradleBuild) { tasks = ['test1'] startParameter.projectProperties = gradle.startParameter.projectProperties + ['param': 'B'] } // 聚合任务,直接依赖上述两个任务即可,不需要指定GradleBuild类型 task testZ { dependsOn testA, testB }
补充优化方案
如果你要调用的test1是当前项目内的任务,不需要触发独立构建,也可以用下面的轻量方案,避免GradleBuild带来的额外构建开销:
// 声明两个带不同参数的占位任务 task testA { doFirst { project.ext.param = 'A' } finalizedBy 'test1' } task testB { doFirst { project.ext.param = 'B' } finalizedBy 'test1' } // 聚合任务 task testZ { dependsOn testA, testB } // 后续test1任务内直接读取project.param取值即可
内容的提问来源于stack exchange,提问作者kevjcoy
相关产品推荐
相关产品推荐

