Gradle 不覆盖的渐变复制
在使用任务Gradle 不覆盖的渐变复制,gradle,Gradle,在使用任务类型:Copy时,是否有避免覆盖文件的方法 这是我的任务: task unpack1(type:Copy) { duplicatesStrategy= DuplicatesStrategy.EXCLUDE delete(rootDir.getPath()+"/tmp") from zipTree(rootDir.getPath()+"/app-war/app.war") into rootDir.getPath()+"/tmp" dupli
类型:Copy
时,是否有避免覆盖文件的方法
这是我的任务:
task unpack1(type:Copy)
{
duplicatesStrategy= DuplicatesStrategy.EXCLUDE
delete(rootDir.getPath()+"/tmp")
from zipTree(rootDir.getPath()+"/app-war/app.war")
into rootDir.getPath()+"/tmp"
duplicatesStrategy= DuplicatesStrategy.EXCLUDE
from rootDir.getPath()+"/tmp"
into "WebContent"
}
我希望避免使用exclude“file/file*”指定所有文件
看起来duplicatesStrategy=duplicatesStrategy.EXCLUDE
不起作用。我在gradle 0.9上读到一个问题,但我使用的是gradle 2.1
这个问题还在吗
还是我误解了这个任务应该如何正确使用
谢谢您可以先检查文件是否存在于目标目录中:
task copyFileIfNotExists << {
if (!file('destination/directory/myFile').exists())
copy {
from("source/directory")
into("destination/directory")
include("myFile")
}
}
task copyFileIfNotExists基于Peter的评论的示例:
task unpack1(type: Copy) {
def destination = project.file("WebContent")
from rootDir.getPath() + "/tmp"
into destination
eachFile {
if (it.getRelativePath().getFile(destination).exists()) {
it.exclude()
}
}
}
对BugOrFeature答案的进一步完善。它对from和into参数使用简单字符串,使用CopySpec的destinationDir属性解析目标文件到文件的相对路径:
task ensureLocalTestProperties(type: Copy) {
from zipTree('/app-war/app.war')
into 'WebContent'
eachFile {
if (it.relativePath.getFile(destinationDir).exists()) {
it.exclude()
}
}
}
你说的“有没有办法避免覆盖文件”是什么意思?在上面的代码中,第二个进入
将战胜第一个(只有一个顶级进入
)。另外,对于同一个复制任务,into
和from
永远不能相同。即使我运行此任务,Gradle也会将文件覆盖到WebContenttask unpack(type:Copy){duplicatesStrategy=duplicatesStrategy.EXCLUDE from rootDir.getPath()+“/tmp”into“WebContent”}我明白你的意思了DuplicatesStrategy
是关于复制源中的副本(from
)。没有配置选项告诉Copy
任务不要覆盖目标目录中已经存在的文件,但您可能可以使用eachFile
实现这一点。有关详细信息,请参见中的复制。您还可以在gradle all
下载的samples
目录中找到一个相关示例。查看,语义似乎已经改变(我的重点是):“尝试将多个文件复制到同一目标时使用的策略。”