Gradle复制没有覆盖

时间:2014-12-04 11:43:02

标签: gradle

使用任务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。

这个问题还存在吗?

或者我误解了如何正确使用这项任务?

谢谢

3 个答案:

答案 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()
        }
    }
}