gpt4 book ai didi

jakarta-ee - 如何使用 Gradle 更新现有的 War/Jar/Zip 文件?

转载 作者:行者123 更新时间:2023-12-03 20:47:27 24 4
gpt4 key购买 nike

我需要复制现有的 war 文件并更新其中的 xml 文件。
我对如何做到这一点的想法是:

  • 从现有 war 中提取文件
  • 替换文件中的字符串
  • 复制 war
  • 将修改后的文件添加回复制的 war

  • 我可以用 Gradle 完成前 3 个步骤,但我只能弄清楚如何用 Ant 完成最后一步。
    task updateWar() << {
    def originalWar = file("deploy/mywar.war")
    def outputDir = file("deploy")
    def wars = [ "war1", "war2" ]
    wars.each() { warFile ->
    delete "deploy/WEB-INF/ejb.xml"
    copy {
    //Step 1
    from(zipTree(originalWar)) {
    include 'WEB-INF/ejb.xml'
    }
    into outputDir
    //Step 2
    filter{
    String line -> line.replaceAll("<value>OriginalText</value>",
    "<value>UpdatedText</value>")
    }
    }
    //Step 3
    copy {
    from outputDir
    into outputDir
    include 'mywar.war'
    rename 'mywar.war',"${warFile}.war"
    }
    //Step 4
    ant.jar(update: "true", destfile: deploy/${warFile}.war") {
    fileset(dir: deploy", includes: 'WEB-INF/**')
    }
    }
    }

    理想情况下,会有一个过滤器选项允许我在复制时修改指定的文件,但我还没有解决这个问题。

    你如何在 Gradle 中有效地做到这一点而不回到 Ant?甚至是一种 gr​​oovy gradle 一步完成的方法吗?

    编辑:
    我已经接近了。使用原始 war 中的 ziptree 的 Zip 任务是第一个关键步骤。文件匹配与过滤器相结合是秘诀!但是,我不能像复制方法那样在循环中使用它,所以我仍然卡住了:(
    task updateWar(type: Zip) {
    def originalWar = file("deploy/mywar.war")
    def outputDir = file("deploy")
    archiveName = "war2.war"
    destinationDir = outputDir
    from (zipTree(originalWar),{
    filesMatching("WEB-INF/ejb.xml") {
    filter{
    String line -> line.replaceAll("<value>OriginalText</value>",
    "<value>UpdatedText</value>")
    }
    }
    })
    }

    最佳答案

    假设您只想替换 war 中的原始文件与一个在 res文件夹,这里是如何做到这一点:

    task updateWar(type: Zip) {
    def originalWar = file("deploy/mywar.war")

    archiveBaseName = 'mywar'
    archiveExtension = 'war'

    from(zipTree(originalWar)) {
    // Remove the original ejb.xml if it exists
    exclude("**/WEB-INF/ejb.xml")
    }

    // Include our own ejb.xml
    from('res/ejb.xml') {
    into('WEB-INF/')
    }
    }

    关于jakarta-ee - 如何使用 Gradle 更新现有的 War/Jar/Zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175321/

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