在Gradle中将文件从一个Zip文件复制到另一个Zip文件
我们正在从Maven迁移到Gradle。不幸的是,我们仍有一些战争重叠需要处理 作为一种变通方法,我试图将一个war文件的内容复制到另一个war文件中 这就是我到目前为止所做的:在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
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-是的,一个有效的例子会很有帮助。蒂亚!很好的回答,谢谢你为我节省了很多时间!这个模式非常灵活->我只需要包含依赖项中的一些资源,该依赖项过去是一个依赖项目,但现在是单独发布的!