使用任务type: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。
这个问题还存在吗?
或者我误解了如何正确使用这项任务?
谢谢
答案 0 :(得分:3)
您可以随时检查文件是否存在于目标目录中:
task copyFileIfNotExists << {
if (!file('destination/directory/myFile').exists())
copy {
from("source/directory")
into("destination/directory")
include("myFile")
}
}
答案 1 :(得分:2)
进一步完善BugOrFeature的答案。它使用简单的字符串作为from和into参数,使用CopySpec的destinationDir属性来解析目标文件的文件相对路径:
std::shared_ptr<Person> r1(new Person("Dull"));
答案 2 :(得分:1)
基于彼得评论的样本:
task unpack1(type: Copy) {
def destination = project.file("WebContent")
from rootDir.getPath() + "/tmp"
into destination
eachFile {
if (it.getRelativePath().getFile(destination).exists()) {
it.exclude()
}
}
}