当前位置: 首页 > 知识库问答 >
问题:

如何使用Gradle更新现有的war/jar/zip文件?

常子濯
2023-03-14

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

  • 从现有WAR中提取文件
  • 替换文件中的字符串
  • 复制警告
  • 将修改的文件添加回复制的WAR
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/**')
        }
    }
}
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>")
            }
        }
    })
}

共有1个答案

华飞驰
2023-03-14

假设您只想用res文件夹中的文件替换war中的原始文件,下面是如何实现的:

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/')
    }
}
 类似资料:
  • 问题内容: 我有一个Web程序,希望用户能够在其中导入文件,并且可以从文件中提取某些文件。我发现了两个类库: 和。据我了解,WAR文件是一个特殊的JAR文件,这是一个特殊的ZIP文件。那么使用会更好吗?如果ZIP和JAR文件几乎相同,为什么需要两个不同的库? 问题答案: 如果查看JarFile API,您会发现它是ZipFile类的子类。 jar特定的类大多只是添加jar特定的功能,例如对清单文件

  • 我想构建一个WAR文件(然后将其部署到Tomcat)。因此,作为练习,我在IDEA Intellij中使用Gradle开始了一个新的Spring启动项目。之后,我在文件中应用了这个插件,比如这个。 问题是,当我尝试在终端中运行时,没有得到war文件!唯一发生的事情是,它将生成一个,其中包含3个子组件、和,但在这些组件中没有战争。 我应该怎么做才能获得WAR文件?我看过这段视频,但这家伙使用Mave

  • 问题内容: 如何用另一个.yml文件更新先前的conda环境。在具有多个需求文件(例如)的项目上工作时,这非常有用。 例如,下面是一个包含和pip软件包的文件: 碱基 实际环境是使用创建的 。 稍后,需要将其他软件包添加到中。例如,另一个文件需要导入这些更新。 先前完成此任务的尝试包括: 创建具有导入定义的文件: 然后运行命令: 。 这是行不通的。有什么想法吗? 问题答案: 尝试使用 或无需激活环

  • 我有一个应用程序服务器,它有一堆文件,我可能需要在运行时动态组合它们的子集,并将它们作为压缩文件在单个HTTP响应中发送。让我们假设这些文件是A和B,我可以将它们预先存储为A.zip和B.zip并将它们组合成包含A和B的c.zip,或者只存储它们A和B,并将它们压缩到c.zip中。哪个更快?

  • 问题内容: 我们可以创建一个zip新文件并使用Go Language添加文件。 但是,如何使用GoLang使用现有的zip文件添加新文件? 如果可以使用Create函数,如何获取zip.writer参考? 有点困惑。 问题答案: 经过更多分析,我发现无法使用现有的zip文件添加任何文件。 但是,通过遵循此URL中提供的技巧,我能够使用tar文件添加文件。