Задача 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'
    }
}
Другие вопросы по тегам