Gradle复制没有覆盖

car*_*081 7 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"
}
Run Code Online (Sandbox Code Playgroud)

我想避免使用exclude'file/file*'指定所有文件.

看起来这duplicatesStrategy= DuplicatesStrategy.EXCLUDE不起作用.我在Gradle 0.9上读到了一个问题,但我正在使用Gradle 2.1.

这个问题还存在吗?

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

谢谢

Sur*_*Dre 9

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()
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)


ern*_*lez 5

您始终可以先检查文件是否存在于目标目录中:

task copyFileIfNotExists << {
  if (!file('destination/directory/myFile').exists())
    copy {
        from("source/directory")
        into("destination/directory")
        include("myFile")
    }
}
Run Code Online (Sandbox Code Playgroud)