Gradle为带自定义参数的任务定义别名的实现方法
实现方法
dependsOn 机制本身就不支持给被依赖任务传递命令行参数,没必要在这个方向上绕路。--configuration productionDebugRuntimeClasspath 本质是给内置依赖报告任务的configuration属性赋值,直接在构建脚本里操作任务属性就能完全等价实现你要的效果。
最优方案:新建独立的依赖报告任务
这个方案不会改动原有:app:dependencies任务的默认行为,隔离性最好。写完后执行./gradlew extractMyDeps,输出结果和你之前敲的长命令完全一致。
- Kotlin DSL(
build.gradle.kts)代码:
tasks.register<DependencyReportTask>("extractMyDeps") { configuration = project(":app").configurations.getByName("productionDebugRuntimeClasspath") }
- Groovy DSL(
build.gradle)代码:
task extractMyDeps(type: DependencyReportTask) { configuration = project(":app").configurations.productionDebugRuntimeClasspath }
备选方案:复用内置dependencies任务
如果你一定要关联调用原有的:app:dependencies任务,可以在自定义任务中提前给目标任务的对应属性赋值,再声明依赖即可。注意要用懒加载的方式拿任务,避免拖慢全量构建的配置速度:
- Kotlin DSL版本:
tasks.register("extractMyDeps") { val appDepsTask = project(":app").tasks.named<DependencyReportTask>("dependencies") appDepsTask.configure { configuration = project(":app").configurations.getByName("productionDebugRuntimeClasspath") } dependsOn(appDepsTask) }
- Groovy DSL版本:
task extractMyDeps { def appDepsTask = project(":app").tasks.named("dependencies") appDepsTask.configure { configuration = project(":app").configurations.productionDebugRuntimeClasspath } dependsOn(appDepsTask) }
注意:这个方案会修改
:app:dependencies任务的默认配置,后续你直接执行./gradlew :app:dependencies时,会默认输出productionDebugRuntimeClasspath的依赖树,除非你手动传其他configuration参数覆盖。
内容的提问来源于stack exchange,提问作者beigirad
相关产品推荐
相关产品推荐

