Вот что я пытаюсь сделать:Gradle задача: как ждать операции файла, чтобы завершить
- архив Copy (ZIP) от зависимостей buildscript во временном каталоге
- Распакуйте архив в другой каталог в
build
Вот задача скопировать архив (работ)
task copyTpcds(type: Copy) {
file('build/zip').mkdirs()
from buildscript.configurations.classpath
include 'tpcds*'
into 'build/zip'
}
И задача распаковать, а затем удалить архив
task extractTpcds(type: Copy) {
def names = new FileNameFinder().getFileNames('build/zip', 'tpcds*')
def outDir = file('build/cmd/tpcds')
outDir.mkdirs() // make sure the directory exists
from zipTree(file(names[0])) // generates error when
into outDir
// now remove copied zip file
//zipFile.delete() // deletes file before the extractions completes?
}
Вот несколько сценариев:
- Если я поставил обе задачи в
build.gradle
и попытаться запустить что-нибудь, даже простоgradle tasks
тогда я получаю эту ошибку:Neither path nor baseDir may be null or empty string. path='null' basedir='C:\dev\code\td\pdo\tpcds-tpg'
из этого кода в задаче № 2:file(names[0])
- Если я закомментировать код во 2-й задаче, первая задача будет работать и скопировать почтовый файл
build/zip
- Теперь я могу раскомментировать код во 2-й задаче (за исключением удаления) и выполнить
gradle extractTpcds
он будет работать и извлечь из архива
Так что, мне кажется, что операции
- файла оценивается во всех задачах, независимо от того, каких задачи являются выполненный
- Если у меня есть код, который копирует файл с некоторым последующим кодом, который пытается работать с копируемым файлом, тогда этот код не будет ждать завершения процесса копирования и не сработает, потому что файла еще нет.
Я нахожусь в убытке о том, как с этим бороться, и был бы очень признателен за ваши предложения
Это отлично работает, спасибо Майкл! Для завершения вы можете привести пример использования Ant для распаковки? – Bostone
ОК, я добавил второй пример ... обратите внимание, что он распаковывает первый ZIP-файл, но может быть легко изменен по мере необходимости. –