如何在Gradle Kotlin DSL中实现Exec任务的output()扩展方法
在Gradle Kotlin DSL中通过扩展方法简化Exec任务输出获取
如果想替换现有代码里的类型转换操作,用类似avdIsRunning.output()的方式直接获取Exec任务的标准输出,可以通过给Exec类型添加扩展函数实现,让代码更简洁优雅:
第一步:定义扩展函数
在build.gradle.kts文件中添加针对Exec任务的扩展方法,封装输出获取逻辑:
// 为Exec任务扩展输出获取方法 fun Exec.output(): String { return this.standardOutput.toString() }
第二步:修改任务定义
调整任务代码,利用扩展方法直接获取输出,无需手动类型转换:
// 注册Exec任务并指定输出流 tasks.register<Exec>("avdIsRunning") { commandLine("adb", "devices") standardOutput = ByteArrayOutputStream() } // 依赖avdIsRunning任务并获取其输出 tasks.register("task2") { dependsOn("avdIsRunning") doLast { val avdTask = tasks.named<Exec>("avdIsRunning").get() val output = avdTask.output() println("AVD设备列表输出: $output") } }
补充说明
- 扩展函数
output()把原本需要强转+toString()的逻辑封装起来,既提升了代码复用性,也让可读性更高。 - 使用
tasks.named<Exec>("avdIsRunning")可以直接获取指定类型的任务实例,比tasks.getByName()后强转的写法更规范。
内容的提问来源于stack exchange,提问作者Murmulodi
相关产品推荐
相关产品推荐

