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

如何配置Gradle让assemble任务不构建指定consumable配置的产物

解决方案

要实现自定义可消费配置的产物仅在被其他项目依赖时才构建,核心是让该产物脱离项目默认的assemble任务依赖链,具体可以通过以下步骤调整:

1. 调整配置属性与产物关联

为自定义的release配置添加独特的属性标识,确保只有明确匹配该属性的依赖才会触发构建;同时将产物关联到配置,但不加入项目默认组件:

plugins {
    id 'java'
}

task createChecksums(type: Task) {
    doLast {
        // 实际生成校验文件的逻辑
        def outputFile = file("someFile")
        outputFile.text = "Generated checksum content"
    }
}

configurations {
    release {
        canBeConsumed = true
        canBeResolved = false
        // 添加独特属性,让其他项目需明确匹配
        attributes {
            attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, "custom-release"))
        }
    }
}

// 将产物关联到release配置,但不纳入默认组件
configurations.release.outgoing.artifact(file("someFile")) {
    builtBy createChecksums
}

2. 解除assemble任务对构建任务的依赖

如果assemble任务自动添加了对createChecksums的依赖,手动移除该关联:

// 确保assemble不会触发createChecksums
tasks.assemble.dependsOn.remove(createChecksums)

3. 其他项目消费该配置的方式

在需要消费的项目中,需明确指定依赖该自定义配置:

plugins {
    id 'java'
}

configurations {
    useRelease
}

dependencies {
    useRelease project(path: ':你的项目名称', configuration: 'release')
}

// 示例任务:消费产物
task useChecksums(type: Task) {
    doLast {
        def checksumFile = configurations.useRelease.files.singleFile
        println "使用校验文件内容:${checksumFile.text}"
    }
}

这样调整后:

  • 执行gradlew assemble时,createChecksums不会被触发;
  • 当其他项目执行依赖release配置的任务(如上述useChecksums)时,会自动触发createChecksums构建产物。

内容的提问来源于stack exchange,提问作者vadim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:25:19