我们正在努力从 Maven 迁移到 Gradle。不幸的是,我们仍然需要处理一些战争叠加层。
作为一种解决方法,我试图将一个战争文件的内容复制到另一个文件中。
这是我到目前为止所拥有的:
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 文件)时,它会失败并出现错误:
使用 toString() 方法将类 org.gradle.api.internal.file.collections.FileTreeAdapter 转换为 File 已被弃用,并计划在 Gradle 2.0 中删除。请改用 java.io.File、java.lang.String、java.net.URL 或 java.net.URI。
如果有人对此有具体建议,或者有更好的“覆盖”战争文件的方法,我将不胜感激!