Задача Gradle Copy после сборки

2

В 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
...

<< делает трюк, как кажется, но как я могу объединить эти два?

Теги:
groovy
gradle

1 ответ

2

Вам не обязательно. Вы видите Unzip... в начале сборки, но это не значит, что Gradle выполняет вашу задачу в этот момент.

Это сообщение печатается на консоли, когда Gradle начинает настраивать вашу задачу копирования, например, добавляет пути к входам и выходам. Реальное выполнение выполняется после сборки. Чтобы убедиться, что вы можете использовать закрытие doLast:

task finalize (type: Copy) {
   doLast { println 'running now' }
   ...
}

Код внутри блока doLast будет выполнен после сборки.

PS Не перемещайте остальную часть своего кода задачи (from zipTree(zipFile) и т.д.) Внутри doLast закрытие, это не сработает.

  • 0
    Добавление doAfter не работает: `Не удалось найти метод doAfter () для аргументов [build_92jecjaieetrt4v2cwwz3ik0j $ _run_closure6 $ _closure9 @ 41b0297c] для задачи ': unzipTestData' типа org.gradle.api.tasks.Copy.
  • 0
    @ Прошу прощения, я забыл имя. это называется doLast, а не doAfter

Ещё вопросы

Сообщество Overcoder
Наверх
Меню