В Gradle легко определить задачи для запуска после сборки.
task finalize1 << {
println('finally1!')
}
build.finalizedBy(finalize1)
Это работает так, как ожидалось. Но теперь я хочу выполнить задачу копирования в конце.
task finalize (type: Copy) {
def zipFile = file('data/xx.zip')
def outputDir = file("data/")
println('Unzip..')
from zipTree(zipFile)
into outputDir
}
build.finalizedBy(finalize)
Это больше не работает. Я вижу вывод "Unzip" в начале сборки (мне нужен экстракт в конце).
Unzip..
:clean
:compileJava
:processResources
:classes
:findMainClass
:jar
:bootRepackage
:assemble
...
<<
делает трюк, как кажется, но как я могу объединить эти два?
Вам не обязательно. Вы видите Unzip...
в начале сборки, но это не значит, что Gradle выполняет вашу задачу в этот момент.
Это сообщение печатается на консоли, когда Gradle начинает настраивать вашу задачу копирования, например, добавляет пути к входам и выходам. Реальное выполнение выполняется после сборки. Чтобы убедиться, что вы можете использовать закрытие doLast
:
task finalize (type: Copy) {
doLast { println 'running now' }
...
}
Код внутри блока doLast
будет выполнен после сборки.
PS Не перемещайте остальную часть своего кода задачи (from zipTree(zipFile)
и т.д.) Внутри doLast
закрытие, это не сработает.
doAfter
не работает: `Не удалось найти метод doAfter () для аргументов [build_92jecjaieetrt4v2cwwz3ik0j $ _run_closure6 $ _closure9 @ 41b0297c] для задачи ': unzipTestData' типа org.gradle.api.tasks.Copy.