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也会将文件覆盖到WebContent
task unpack(type:Copy){duplicatesStrategy=duplicatesStrategy.EXCLUDE from rootDir.getPath()+“/tmp”into“WebContent”}我明白你的意思了
DuplicatesStrategy
是关于复制源中的副本(
from
)。没有配置选项告诉
Copy
任务不要覆盖目标目录中已经存在的文件,但您可能可以使用
eachFile
实现这一点。有关详细信息,请参见中的复制。您还可以在
gradle all
下载的
samples
目录中找到一个相关示例。查看,语义似乎已经改变(我的重点是):“尝试将多个文件复制到同一目标时使用的策略。”