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

2023-11-30

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

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

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

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

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

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

似乎发生的情况是,任务 1 运行良好并解开了战争。然后,任务 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 有关,但不确定到底发生了什么。


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

你可以使用复制法而不是复制任务。

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'
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle 复制任务第一次不从临时文件夹复制文件 的相关文章

随机推荐

  • 每个 Flash 上传器都会给出错误的进度值

    我去年初为内部网站编写的文件上传脚本在许多机器上表现得很奇怪 在某些机器上它始终工作正常 而在其他机器上它始终表现不佳 我在使用 YUI Uploader SWFUpload 2 2 和 2 5a 和 Uploadify 时遇到完全相同的问
  • MutableLiveData 中 setValue() 和 postValue() 的区别

    有两种方法可以使变化值MutableLiveData 但有什么区别setValue postValue in MutableLiveData 我找不到相同的文档 这里是班级MutableLiveData安卓的 package android
  • 改变矩阵维度

    让我们举一个可复制的例子 这是我的初始矩阵 d lt matrix 1 80 5 d 1 2 3 4 5 1 1 17 33 49 65 2 2 18 34 50 66 3 3 19 35 51 67 4 4 20 36 52 68 5 5
  • 在 asp net mvc 5 中使用会话变量进行授权

    所以我的项目需求发生了变化 现在我想我需要构建自己的操作过滤器 所以 这是我当前的登录控制器 public class LoginController Controller GET Login public ActionResult Ind
  • 如何随机均衡不相等的值?

    假设我有多个不相等的值 a b c d e 是否可以仅通过随机数生成将这些不相等的值变成相等的值 示例 a 100 b 140 c 200 d 2 e 1000 我希望算法随机定位这些集合 以便最常定位最大值 而大多数情况下只保留最小值 我
  • 当列类型为 nvarchar 时,将表与列值总和一起旋转

    我有一个具有以下结构的表 我想转置它 BookId Status 123A Perfect 123B Restore 123C Lost 123D Perfect 123A Perfect 123B Restore 123A Lost 12
  • rpy2 在 Windows 7 上安装

    我试图在我的计算机上安装 rpy2 但无法做到这一点 我下载了源码包 并尝试使用命令安装Rpy2 rpy2 2 3 2 python setup py install 这是结果 running install running build r
  • 我想获取 SD 卡中的音频文件

    在我的应用程序中我想设置ringtone当我接到来电时 如何打开SDCARD并得到音频文件并列出它 如何获得URI对于所选的audio file MediaScanner 为您查找音乐 填充 MediaStore 数据库 下面是一些查找音乐
  • 使用可选参数和命名参数解决歧义

    我的项目有两种方法 定义如下 void Person int ID double height 0 0 string team Knights my codes void Person int ID double height 0 0 st
  • 如何组合两个机器学习算法的输出?

    如果我有两个非常不同的数据集和两种非常不同的分类技术 是否有一个很好的方法来组合这两个输出 我知道平均值可能有效 但有没有更相关的方法来做到这一点 我听说过一些概念 例如增强学习和集成学习 这些概念是否适用 解决这个问题有两种一般方法 第一
  • 使用部分可变参数调用函数

    考虑我有以下内容 void bar int a int b template
  • 如何设计 HTML5 表单验证消息的样式? [复制]

    这个问题在这里已经有答案了 假设你有一些像这样的 HTML
  • 使用 .htaccess 来屏蔽域名?

    所以这是场景 我拥有的域名是 www abc com 我想将其指向 属于另一家公司 问题 如何使用 htaccess 转发和屏蔽 URL 使其保持为 www abc com 从安全角度来说 为www abc com购买数字证书有什么意义吗
  • 未处理的拒绝(TypeError):ships.reduce 不是函数

    我使用特定的 API 构建了一个船可视化器 API 返回一个 json 响应 我将其注入到表中 问题 有时在白天 我注意到应用程序会停止工作并抛出以下实例 Unhandled Rejection TypeError ships reduce
  • numpy einsum:嵌套点积

    我有两个n by k by 3 arrays a and b e g import numpy as np a np array 1 2 3 3 4 5 4 2 4 1 4 5 b np array 3 1 5 0 2 3 2 4 5 1
  • Mockito 和 PowerMock MethodNotFoundException 被抛出

    当使用 Powermockito 和 Mockito 为我围绕 Hikari CP 制作的连接池构建一些简单的单元测试时 遇到以下错误 测试的设置如下 让我感到困惑的是 我有一大堆未显示的单元测试 它们都使用相同的设置和方法通过了 仅此一个
  • 在 ARCore unity 中禁用/切换跟踪平面的可视化

    我已经研究 ARCore Unity 的代码有一段时间了 我想做一个简单的任务 即有一个切换按钮 以便用户可以在场景中放置一个对象 同时知道在跟踪平面可见时将其放置在哪里一旦用户放置了对象 他就可以选择仅在视觉上禁用跟踪的平面 使其看起来更
  • 在 C 的哪些版本中,括号内的块用于返回有效值?

    If I do int j int x 7 x 3 在 i686 apple darwin10 gcc 4 2 1 GCC 4 2 1 Apple Inc build 5646 gcc 中 它编译得很好 有问题的块 int x 7 x 3
  • 悬空指针,free()后值改变的原因?

    在下面的代码段中 之后free x 为什么y变成0 根据我的理解 所指向的堆中的内存x 并且仍然被指出y 还没有分配给别人 怎么会变成0呢 而且 我不认为这是free x 这将其更改为 0 任何意见 include
  • Gradle 复制任务第一次不从临时文件夹复制文件

    我有一个运行这样的任务的构建文件 Task 1 unpackWar 将war文件解压到Temp文件夹 Task 2 copyWarFilesToWebContent 将文件复制到 WebContent 文件夹 并排除一些内容 Task 3