Как я могу получить доступ к задачам ant из сценария build.gradle.kts
? В частности, меня интересует задача ant.patch
.
Могу ли я продлить его так?
task("patchSources", Patch::class) {
Могу ли я вызвать его из другой задачи, например?
task("patchSources") { doLast { ant.patch(...) } }
Я знаю, как это сделать в Groovy: как применить файл исправлений в Gradle?
Это работает для меня:
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() } } }
Я не уверен, что это одно-правостороннее.
AntBuilder
простирается от Groovy's AntBuilder
. Вы можете перевести вызовы динамического метода из groovy like ant.patch()
в Kotlin с помощью invokeMethod
и предоставления желаемой задачи в качестве первого аргумента и свойств для привязки в качестве карты во втором аргументе.
Например, для вашего случая использования Patch ( документация доступных свойств ) Kotlin может выглядеть так:
val patchSources by tasks.creating { doLast { ant.invokeMethod("patch", mapOf( "patchfile" to patchFile, "dir" to configDir, "strip" to 1 )) } }