我遇到了Ant的Sync
任务的一个问题,其中文件被不必要地复制。目标是用${source}
目录的内容更新${destination}
目录中的所有内容,即使${destination}
中的文件较新。根据Ant的文档,我添加了一个overwrite
属性来确保覆盖${destination}
。
<target name="test">
<sync todir="${destination}" overwrite="true" granularity="5000">
<fileset dir="${source}">
</fileset>
</sync>
</target>
此任务正确地覆盖${destination}
,但始终复制该文件,即使源和目标相同。这会导致大量不必要的流量。
根据文档,我尝试配置granularity
属性,但这似乎没有任何效果。我还在同一台机器上的两个目录之间运行这个测试,所以我不期望时间戳的差异(当然不超过5秒)。
关于Sync
任务和overwrite
属性为什么以这种方式起作用,有什么想法吗?是否有使用默认Ant任务集来防止不必要的文件复制的解决方案?
如果您使用overwrite="true"的同步任务,您将得到此行为。
你可以用overwrite="false"来使用它,然后使用一个拷贝任务,只复制存在但不同的文件,使用不同的选择器,例如:
<copy todir="${destination}">
<fileset dir="${source}">
<different targetdir="${destination}" ignoreFileTimes="true"/>
</fileset>
</copy>