Я хочу создать задачу 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)
}
Этот код работает, только если from и into разные каталоги.
может быть, вас также интересуют привязки схемы?
возможно, вам также нужно обернуть такой код, как показано выше, в doLast {...
С вашим первым решением все работает. Но doLast не помогло.
Спасибо за ваш отзыв. Добавил первый комментарий в качестве ответа. Я использовал doLast один раз в сочетании с другой задачей, чтобы убедиться, что она вызывается в конце этой задачи... подумал, что вам тоже может понадобиться что-то подобное...


Как также упоминалось в комментариях и как это сработало, вместо этого вы можете сделать следующее:
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;")) }
}
Обратите внимание, что вас также могут заинтересовать привязки схемы, в зависимости от того, как вы генерируете свой код. Сканирование всех файлов, которые только что были сгенерированы, для их повторной адаптации может быть не самым быстрым выбором, тогда как предоставление генератору соответствующих привязок уже сгенерирует вам требуемый код.
разве здесь недостаточно сделать следующее:
dir.walk().filter { /* if that should be a filter */ it.name == "TestSourceClass.java" }.forEach { it.writeText(it.readText().replace(....)) }? В конце концов, это сгенерированный код... но, вероятно, более интересный вопрос: чего вы пытаетесь достичь?