如何配置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
相关产品推荐
相关产品推荐

