在Gradle中将文件从一个Zip文件复制到另一个Zip文件

在Gradle中将文件从一个Zip文件复制到另一个Zip文件,gradle,Gradle,我们正在从Maven迁移到Gradle。不幸的是,我们仍有一些战争重叠需要处理 作为一种变通方法,我试图将一个war文件的内容复制到另一个war文件中 这就是我到目前为止所做的: task overlayWars (dependsOn: war) << { // Get the source war files to copy the contents from... def dependencyWars = configurations.runtime.filter

我们正在从Maven迁移到Gradle。不幸的是,我们仍有一些战争重叠需要处理

作为一种变通方法,我试图将一个war文件的内容复制到另一个war文件中

这就是我到目前为止所做的:

task overlayWars (dependsOn: war) << {
    // Get the source war files to copy the contents from...
    def dependencyWars = configurations.runtime.filter { it.name.endsWith ('.war') }
    dependencyWars.each { dependentWar ->

        // Get the products, ie the target war file...
        war.outputs.files.each { product ->
            println "Copying $dependentWar contents into $product"
            copy {
                from { zipTree (dependentWar) }
                into { zipTree (product)}   // this seems to be the problem
                include 'WEB-INF/classes/**/*.class'
                include 'WEB-INF/jsp/**/*.jsp'
            }
        }
    }
}
任务覆盖war(dependsOn:war)
//获取产品(即目标war文件)。。。
war.outputs.files.each{product->
println“正在将$dependentWar内容复制到$product”
抄袭{
来自{zipTree(dependentWar)}
进入{zipTree(product)}//这似乎就是问题所在
包括“WEB-INF/classes/***.class”
包括“WEB-INF/jsp/***.jsp”
}
}
}
}
into{zipTree(product)}
是一个文件(比如
file('tmp/whatever')
)时,这就可以了。指定另一个zip文件(目标war文件)时失败,错误如下:

转换班 org.gradle.api.internal.file.collections.FileTreeAdapter使用 toString()方法已被弃用,并计划删除 在Gradle2.0中。请使用java.io.File、java.lang.String、, 改为java.net.URL或java.net.URI


如果有人对此有特别的建议,或者有更好的方法来“覆盖”战争文件,我将非常感谢

如果您试图在此处合并战争,则不能使用
Copy
任务/方法。您必须使用
Zip
任务(没有等效的方法)。如果您想合并到现有的War中,方法是
existingWar.from{zipTree(otherWar)}

从几个不同的角度出发,我得出以下结论:

war {
    configurations.runtime.filter { it.name.endsWith ('.war') }.each {
        from zipTree (it).matching {
            include 'WEB-INF/classes/**/*.class'
            include 'WEB-INF/jsp/**/*.jsp'
            include 'images/**'
        }
    }
}

基本上,我只是在产品中包含任何.war依赖项的过滤内容。作为对标准war任务的修改,依赖关系树保持干净。到目前为止,它似乎对我们有效…

感谢您的反馈-您完全正确。顺便问一下,您如何从文件系统上的.war创建一个“existingWar”?我知道如何创建一个新的,但不知道如何引用/加载一个现有的…你不能。你需要创建一个
Zip
任务并合并战争。你能给出一个完整的例子来说明如何做到这一点吗?@PeterNiederwieser-是的,一个有效的例子会很有帮助。蒂亚!很好的回答,谢谢你为我节省了很多时间!这个模式非常灵活->我只需要包含依赖项中的一些资源,该依赖项过去是一个依赖项目,但现在是单独发布的!