使用gradle-script-kotlin的蚂蚁任务



如何从我的 build.gradle.kts脚本访问蚂蚁任务?特别是我对ant.patch任务感兴趣。

我可以像这样扩展它吗?

task("patchSources", Patch::class) {

我可以从其他任务中调用它吗?

task("patchSources") {
    doLast {
        ant.patch(...)
    }
}

我知道如何在Groovy中进行操作:如何在Gradle中应用一个补丁文件?

AntBuilder从Groovy的AntBuilder延伸。您可以通过使用invokeMethod将动态方法调用从类似ant.patch()的Groovy转换为Kotlin,并提供所需的任务作为第一个参数,而属性则在第二个参数中作为映射绑定为映射。

例如,对于您的 patch 用例(可用属性文档)Kotlin看起来像这样:

val patchSources by tasks.creating {
  doLast {
    ant.invokeMethod("patch", mapOf(
        "patchfile" to patchFile,
        "dir" to configDir,
        "strip" to 1
    ))
  }
}

这对我有用:

import org.apache.tools.ant.taskdefs.Patch
val patchConfigTask = task("patchConfig") {
    dependsOn(unzipTask)    
    doLast {
        val resources = projectDir.resolve("src/main/resources")
        val patchFile = resources.resolve("config.patch")
        Patch().apply {
            setPatchfile(patchFile)
            setDir(buildDir.resolve("config/"))
            setStrip(1)  // gets rid of the a/ b/ prefixes
            execute()
        }
    }
}

我不确定这是否是单向通道到do-it。

最新更新