Gradle 7 (Groovy 3) - метод в закрытии выполняется/вызывается немедленно
Я обновляю Gradle с 5.6.3 до 7.5.1. У меня есть настраиваемый плагин Gradle, который принимает закрытие. И в build.gradle моего основного приложения я вызываю задачу этого пользовательского плагина и присваиваю значение этому закрытию.
основной проект -
task(type: MyCustomTask, 'custom') {
myClosure = {
filesMatching('**/my.yaml') {
filter { it.replace('${test}', 'TEST') }
}
}
...
}
пользовательский плагин -
@Input
@Optional
Closure myClosure = { }
private void copyFiles() {
println "--------------------------Copying"
project.copy {
from "${project.projectDir}/src/main/resources"
into "${buildDir}"
final cl = myClosure.clone()
cl.delegate = delegate
cl()
}
}
@TaskAction
def custom() {
...
copyFiles()
...
}
Это отлично работает с gradle 5 (groovy 2.5), но с gradle 7 (groovy 3) я получаю
Не удалось выполнить задачу «Пользовательская».
Ошибка при оценке свойства myClosure задачи custom. Не удалось найти метод filesMatching() для аргументов [**/my.yaml, build_46x3ac [ email protected] 15088f00] для задачи custom типа com.custom.gradle.plugin. .tasks.ТестТаск.
Любое предложение здесь, чтобы исправить проблему? Спасибо!
1 ответ
Невозможно найти какое-либо решение. Итак, я добавил следующий хак, чтобы исправить это:
основной проект -
task(type: MyCustomTask, 'custom') {
replaceText('**/my.yaml', '${test}', 'TEST')
...
}
собственный плагин -
@Input
@Optional
Closure myClosure = { }
@Input
@Optional
Map fileArgs = [:]
void replaceText(String a, String b, String c) {
fileArgs = [a: a, b: b, c: c]
}
private void copyFiles() {
project.copy {
from "${project.projectDir}/src/main/resources"
into "${buildDir}"
final cl = myClosure.clone()
cl.delegate = delegate
cl()
if (fileArgs) {
filesMatching(fileArgs.a) {
filter { it.replace(fileArgs.b, fileArgs.c) }
}
}
}
}
@TaskAction
def custom() {
...
copyFiles()
...
}