如何在非命令行场景下从一个Gradle任务向另一Gradle任务传递文本参数
Gradle任务间非命令行传参实现方案
Gradle原生不支持dependsOn('buildDist(PARAM)')这种直接给依赖任务传参的写法,你可以通过以下两种方式实现需求:
方案1:自定义任务类型(推荐,多场景无冲突)
自定义带输入属性的任务类型,不同参数对应独立的任务实例,不会出现参数覆盖问题,支持Gradle增量构建:
// 1. 定义带参数的自定义任务类型 abstract class BuildDist extends DefaultTask { // 声明输入参数PARAM @Input abstract Property<String> getParam() @TaskAction void executeCopy() { project.copy { from "${project.projectDir}/src/${param.get()}/ClientBanner.json" into "${project.buildDir}/${project.name}/" } } } // 2. 创建对应参数的buildDist任务实例 task buildDistWithCustomParam(type: BuildDist) { param.set("替换为你需要传入的PARAM实际值") } // 3. 配置压缩任务依赖对应实例即可 task dist(type: Zip) { from "$buildDir" include "${project.name}/**/*" archiveFileName = project.name + '.zip' destinationDirectory = layout.buildDir.dir('dist') dependsOn buildDistWithCustomParam }
方案2:扩展属性传参(轻量,适合单调用方场景)
不需要自定义任务类型,直接给任务加扩展属性存参数,仅适合只有一个任务依赖buildDist的场景使用:
// 定义buildDist任务,加扩展参数 task buildDist { ext.param = "默认参数值" doLast { copy { from "$projectDir/src/${param}/ClientBanner.json" into "$buildDir/${project.name}/" } } } // 压缩任务配置阶段修改参数即可 task dist(type: Zip) { buildDist.param = "你要传入的PARAM值" from "$buildDir" include "${project.name}/**/*" archiveFileName = project.name + '.zip' destinationDirectory = layout.buildDir.dir('dist') dependsOn buildDist }
注意:轻量方案如果有多个任务同时依赖buildDist,后配置的任务参数会覆盖之前的配置,导致构建结果不符合预期。
内容的提问来源于stack exchange,提问作者Shapebuster
相关产品推荐
相关产品推荐

