Gradle Sync任务,同步到文件夹但忽略目标中的指定目录

时间:2014-05-15 05:15:07

标签: groovy gradle

我想将我的驱动器上的文件夹与包含我想要保留的名为“logs”的文件夹的另一个文件夹同步。困惑?这是一个图表:

C:\
|-- mydir/ # sync this folder
|   `-- someotherfiles.txt
`-- anotherDir/ # into this folder
    |-- logs/ # but if this exists, leave it there
    `-- someotherfiles.txt

这可以使用同步任务吗?我似乎无法正确配置它,我的最新尝试可能会暗示你到我的场景,所以这里(不工作):

task syncDevDeployFolder(type: Sync, group: 'dev') {
    from currentDeliverablesDir
    destinationDir = file(project.properties['dev.deployment.dir'])
    into (project.properties['dev.deployment.dir']) {
        exclude "logs"
    }
}

3 个答案:

答案 0 :(得分:2)

在撰写本文时,Gradle的当前版本为3.3,从版本3.1开始,有一个名为“preserve”的孵化功能可用于实现您的目标:

请参阅documentation

中的示例
// You can preserve output that already exists in the
// destination directory. Files matching the preserve
// filter will not be deleted.
task sync(type: Sync) {
    from 'source'
    into 'dest'
    preserve {
        include 'extraDir/**'
        include 'dir1/**'
        exclude 'dir1/extra.txt'
    }
}

因此,在您的情况下,您可以这样指定:

preserve {
    include 'logs/**'
}

答案 1 :(得分:1)

  

这可以使用同步任务吗?

不,Sync任务目前不支持此功能。

答案 2 :(得分:1)

您可以回退到ant的同步任务。无论如何,ant对象都可用于所有gradle构建脚本

task antSync << {
    ant.sync(todir:"dest/"){
        ant.fileset(dir: "source/")
        ant.preserveintarget(includes: "logs/")
    }
}