Задача Gradle Copy не копировать файлы из временной папки в первый раз
Если кто-нибудь знает, что я делаю не так, я был бы признателен.
У меня есть файл сборки, который запускает такие задачи.
Задача 1 (unpackWar): распаковывает файл war в папку Temp
Задача 2 (copyWarFilesToWebContent): копирует файлы в папку WebContent с некоторыми исключениями
Задача 3 (copyRequiredJarFilesToWebContent): распаковывает несколько файлов jar из Temp/WEB-INF/lib в TempJarDir
Задача 4 (explodeProductJars): копирует нужные нам файлы из TempJarDir в папку WebContent
Существует одна задача подготовки, которая запускает каждую из этих задач с использованием зависящего от нее, и я добавил команды mustRunAfter к каждой из задач, чтобы они выполнялись по порядку. Также установите upToDateWhen = false для каждой задачи.
Кажется, что происходит то, что Задача 1 работает нормально и расстегивает молнию на войне. Задача 2 затем использует файлы из Temp и правильно добавляет необходимые в WebContent.
Задача 3 и Задача 4 всегда возвращаются как Обновленные, потому что, по-видимому, в указанном каталоге нет файлов для работы.
Если я перезапущу подготовить, когда папка Temp существует, Задачи 3 и 4 будут выполнены правильно.
Я не уверен, связано ли это с тем, как работает fileTree, или я делаю что-то не так. Я подобрал град примерно неделю назад и до сих пор с ним справляюсь.
Спасибо за помощь.
Задачи выглядят так:
task prepare(dependsOn: ['unpackWar', 'copyWarFilesToWebContent', 'copyRequiredJarFilesToWebContent'])
prepare.outputs.upToDateWhen {false}
task unpackWar(type: Copy) {
description = 'unzips the war'
outputs.upToDateWhen { false }
def warFile = file(warFileLocation)
from zipTree(warFile)
into "Temp"
}
task copyWarFilesToWebContent(type: Copy) {
mustRunAfter unpackWar
description = 'Moves files from Temp to WebContent Folder'
outputs.upToDateWhen { false }
from ('Temp') {
exclude "**/*.class"
}
into 'WebContent'
}
task explodeProductJars(type: Copy) {
outputs.upToDateWhen { false }
FileTree tree = fileTree(dir: 'Temp/WEB-INF/lib', includes: ['application*-SNAPSHOT-resources.jar', 'services*-SNAPSHOT-resources.jar'])
tree.each {File file ->
from zipTree(file)
into "TempJarDir"
}
}
task copyRequiredJarFilesToWebContent(type: Copy, dependsOn: explodeProductJars) {
mustRunAfter copyWarFilesToWebContent
outputs.upToDateWhen { false }
from ("TempJarDir/META-INF/resources") {
include '**/*.xml'
}
into "WebContent/WEB-INF"
}
Я чувствую, что это как-то связано с fileTree, но не уверен, что именно происходит.
1 ответ
Задача копирования сложна. Задача копирования будет выполнена только тогда, когда она найдет что-то для копирования на этапе настройки. Если он не найдет ничего на этом этапе, он будет пропущен. Вы можете использовать метод копирования вместо задачи копирования.
prepare( dependsOn: 'copyRequiredJarFilesToWebContent' ) {}
task unpackWar( type: Copy ) {
def warFile = file( warFileLocation )
from zipTree( warFile )
into 'Temp'
}
task copyWarFilesToWebContent( dependsOn: unpackWar ) << {
copy {
from ( 'Temp' ) {
exclude '**/*.class'
}
into 'WebContent'
}
}
task explodeProductJars( dependsOn: copyWarFilesToWebContent ) << {
copy {
FileTree tree = fileTree( dir: 'Temp/WEB-INF/lib', includes: [ 'application*-SNAPSHOT-resources.jar', 'services*-SNAPSHOT-resources.jar' ] )
tree.each { File file ->
from zipTree( file )
into 'TempJarDir'
}
}
}
task copyRequiredJarFilesToWebContent( dependsOn: explodeProductJars ) << {
copy {
from ( 'TempJarDir/META-INF/resources' ) {
include '**/*.xml'
}
into 'WebContent/WEB-INF'
}
}