替换Kotlin DSL中的文件内容

时间:2019-02-26 12:30:42

标签: gradle kotlin

我想创建gradle任务来替换我的导入。到目前为止,我已经创建了这个。

val replaceImports by creating(Copy::class) {
    val dir = "${project.buildDir}/generated-sources/xjc/com/test/dto/"
    from(dir){
        include("TestSourceClass.java")
        filter{ line -> line.replace("package com.test;","package com.test;\n\nimport com.test2.AaaClass;")}
    }
    into(dir)
}

仅当frominto是不同目录时,此代码才有效。

1 个答案:

答案 0 :(得分:0)

正如评论中提到的那样,并且可以正常工作,您可以执行以下操作:

val replaceImports by creating(Copy::class) {
  dir.walk()
     .filter { /* if that should be a filter */ it.name == "TestSourceClass.java" }
     .forEach { it.writeText(it.readText().replace("package com.test;","package com.test;\n\nimport com.test2.AaaClass;")) }
}

请注意,您可能还对模式绑定感兴趣,这取决于生成代码的方式。遍历先前生成的所有文件以再次适应它们可能并不是真正的最快选择,但是为生成器提供适当的绑定将已经为您生成了所需的代码。