Gradle 复制任务第一次没有从临时文件夹复制文件
Gradle copy task not copying files from temp folder first time around
我有一个构建文件 运行s 这样的任务。
任务 1 (unpackWar
):将 war 文件解压缩到临时文件夹
任务 2 (copyWarFilesToWebContent
):将文件复制到 WebContent 文件夹,但有一些排除项
任务 3 (copyRequiredJarFilesToWebContent
):将几个 jar 文件从 Temp/WEB-INF/lib 解压缩到 TempJarDir
任务 4 (explodeProductJars
): 将我们想要的文件从 TempJarDir 复制到 WebContent 文件夹
有一个单独的准备任务,运行这些任务中的每一个都使用 dependsOn,我已经向每个任务添加了 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'
}
}
我有一个构建文件 运行s 这样的任务。
任务 1 (unpackWar
):将 war 文件解压缩到临时文件夹
任务 2 (copyWarFilesToWebContent
):将文件复制到 WebContent 文件夹,但有一些排除项
任务 3 (copyRequiredJarFilesToWebContent
):将几个 jar 文件从 Temp/WEB-INF/lib 解压缩到 TempJarDir
任务 4 (explodeProductJars
): 将我们想要的文件从 TempJarDir 复制到 WebContent 文件夹
有一个单独的准备任务,运行这些任务中的每一个都使用 dependsOn,我已经向每个任务添加了 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'
}
}