gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:13:32 25 4
gpt4 key购买 nike

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

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

任务 2 (copyWarFilesToWebContent):将文件复制到 WebContent 文件夹,并排除一些内容

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

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

有一个准备任务使用 dependentOn 运行每个任务,并且我已向每个任务添加了 MustRunAfter 命令,以便它们按顺序执行。还为每个任务设置 upToDateWhen = false。

似乎发生的情况是任务 1 运行良好并解压了 war 。然后,任务 2 使用 Temp 中的文件并将所需的文件正确添加到 WebContent。

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

如果我在 Temp 文件夹存在时重新运行准备,任务 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 有关,但不确定到底发生了什么。

最佳答案

复制任务很棘手。仅当复制任务在配置阶段找到要复制的内容时,才会执行复制任务。如果在该阶段没有找到任何内容,它将被跳过。

您可以使用copy method而不是复制任务。

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

关于Gradle 复制任务第一次不从临时文件夹复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com