我们正在努力从Maven迁移到Gradle。不幸的是,我们仍然需要处理几个War叠加。
作为一种解决方法,我试图将一个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'
}
}
}
}
当into { zipTree (product)}
是文件(如file ('tmp/whatever')
)时,这样可以正常工作。当指定另一个zip文件(目标war文件)时,它失败并显示错误:
转换课程 org.gradle.api.internal.file.collections.FileTreeAdapter to File using toString()方法已被弃用,并计划删除 在Gradle 2.0中。请使用java.io.File,java.lang.String, java.net.URL,或java.net.URI。
如果有人对此有具体建议,或者更好地“覆盖”战争文件,我真的很感激!
答案 0 :(得分:5)
在追逐几个不同的角度后,我最终得到了这个:
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依赖项的过滤内容。作为标准战争任务的改变,依赖树保持清洁。到目前为止似乎对我们有用......
答案 1 :(得分:1)
如果您尝试在此处合并战争,则无法使用Copy
任务/方法执行此操作。您将不得不使用Zip
任务(没有等效方法)。如果您想要合并到现有战争中,执行此操作的方法是existingWar.from { zipTree(otherWar) }
。