You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在非命令行场景下从一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:01