Gradle复制任务不是第一次从临时文件夹复制文件

时间:2016-11-09 11:14:00

标签: gradle copy temp filetree

如果有人知道我在这里做错了什么我会很感激。

我有一个运行这样的任务的构建文件。

任务1(unpackWar):将war文件解压缩到Temp文件夹

任务2(copyWarFilesToWebContent):使用一些排除项将文件复制到WebContent文件夹

任务3(copyRequiredJarFilesToWebContent):将一些jar文件从Temp / WEB-INF / lib解压缩到TempJarDir

任务4(explodeProductJars):将我们想要的文件从TempJarDir复制到WebContent文件夹

有一个准备任务使用dependsOn运行每个任务,我已经为每个任务添加了mustRunAfter命令,因此它们按顺序执行。同时为每项任务设置ToDateWhen = false。

似乎发生的事情是任务1运行正常并解压缩战争。然后,任务2使用Temp中的文件并将所需的文件正确添加到WebContent。

任务3和任务4总是以最新状态返回,因为似乎在指定的目录中没有可以使用的文件。

如果我在临时文件夹存在时重新运行准备,则任务3和4正确运行。

我不确定这是由于fileTree如何工作还是我做错了。大约一周前我已经拿起了gradle,我仍然在掌握它。

感谢您的帮助。

任务看起来像这样:

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 个答案:

答案 0 :(得分:3)

复制任务很棘手。只有在配置阶段找到要复制的内容时,才会执行复制任务。如果在该阶段没有找到任何内容,则会跳过它。您可以使用复制方法而不是复制任务。

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'
    }
}