Gradle Copy Task:如何覆盖现有文件?

Posted

技术标签:

【中文标题】Gradle Copy Task:如何覆盖现有文件?【英文标题】:Gradle Copy Task: How to overwrite existing files? 【发布时间】:2012-09-01 10:26:03 【问题描述】:

Copy api 没有提到可以设置的标志/属性。那么默认操作是什么,如何修改呢?


根据this,

从 Gradle 0.9.1 开始,复制任务总是覆盖文件。另一个 尚不支持策略。

【问题讨论】:

【参考方案1】:

正如问题文本所说,Copy 任务会覆盖文件,目前不支持其他策略。如果这不适合您的情况,您可以随时退回到 Ant 任务。

【讨论】:

谢谢,我只是想直接从马口中听到! :D 知道何时实施这些新策略(如果有的话)? 现在情况如何?【参考方案2】:

查看 DuplicatesStrategy http://www.gradle.org/docs/1.7-rc-1/release-notes#duplicate-file-handling-for-copy-and-archive-operations 和 http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/DuplicatesStrategy.html。两者都应该适用于非覆盖复制(而覆盖复制是默认设置)。

duplicatesStrategy 'exclude'

还可以查看 Gradle Zip DuplicatesStrategy not working correctly 以了解嵌套“from”s 中可能存在的错误。

【讨论】:

【参考方案3】:

我在使用任务复制时遇到了同样的问题,gradle 总是执行最新的检查,这会导致复制被跳过。

阅读更多关于 gradle 用户手册的内容后,我发现我们可以使用 project.copy() 方法代替任务 Copy。此方法跳过最新检查,因此文件将始终复制到目标。

task myCopy << 
    copy 
        from (yourSourceDir)
        into (yourDestDir)
    

【讨论】:

这看起来像是试图解决您自己创建的问题(由于&lt;&lt;)。看看这个问题的公认答案:***.com/questions/16358194/…

以上是关于Gradle Copy Task:如何覆盖现有文件?的主要内容,如果未能解决你的问题,请参考以下文章

深入理解gradle中的task

在gradle Copy任务中动态设置文件权限

Gradle 自定义Task 打Jar包

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.1——编写自己的任务

gradle task

Jenkins中用jacoco统计gradle项目的代码覆盖率