Ant 蚂蚁拷贝拷贝命令
我是ant的新手,我想知道ant副本是如何决定复制顺序的。问题是,我有一个这样的文件夹结构:releases/v1、v2、v3。将为每个新版本创建文件夹。这些文件夹中的文件名将相似。需要将最新版本复制到名为“latest”的文件夹中。在这种情况下,需要将v3复制到“latest”文件夹中。所以我的逻辑是一个接一个地复制到“latest”文件夹中,并覆盖这些文件,最后将保留最新的文件。我的代码是这样的Ant 蚂蚁拷贝拷贝命令,ant,build-automation,Ant,Build Automation,我是ant的新手,我想知道ant副本是如何决定复制顺序的。问题是,我有一个这样的文件夹结构:releases/v1、v2、v3。将为每个新版本创建文件夹。这些文件夹中的文件名将相似。需要将最新版本复制到名为“latest”的文件夹中。在这种情况下,需要将v3复制到“latest”文件夹中。所以我的逻辑是一个接一个地复制到“latest”文件夹中,并覆盖这些文件,最后将保留最新的文件。我的代码是这样的 <copy todir="${srcdist.layout.dir}/etc/wsdl/
<copy todir="${srcdist.layout.dir}/etc/wsdl/latest" flatten="true" overwrite="true">
<fileset dir="../../releases">
<include name="**/*.wsdl"/>
</fileset>
</copy>
这段代码在centOS中对我很有效。它从v1开始复制,到v3结束。但我对这份复印订单感到怀疑,这是否每次都能奏效。“复制到目录”是否在复制前对文件夹名称进行排序?请帮帮我 我认为复制时依赖文件的顺序是不好的。因此,如果您可以尝试更改此逻辑以使用从选择最新的wsdl文件并仅复制此文件,而不是复制所有版本的所有文件,则可能会更好。可以这样做:
<timestampselector property="latest.modified">
<path>
<fileset dir="../../releases">
<include name="**/*.wsdl" />
</fileset>
</path>
</timestampselector>
<copy todir="${srcdist.layout.dir}/etc/wsdl/latest" file="${latest.modified}"/>
或者,从Ant 1.7.1开始,您可以使用获取最新文件。在这里,您可以使用排序找到一个。
<copy todir="${srcdist.layout.dir}/etc/wsdl/latest" flatten="true" overwrite="true">
<sort>
<fileset dir="../../releases">
<include name="**/*.wsdl"/>
</fileset>
</sort>
</copy>
从Ant文档中的:
…某些资源集合类型,如文件集、目录集和文件
在顺序方面没有定义
因此,您不能依赖于维护任何顺序的文件集
相反,您可以使用JavaScript查找最新版本目录:
为了测试脚本,我在一个releases目录下创建了几个v目录。每个目录都有一个*.wsdl文件
$ls-R发行/
发布/:
v1 v10 v2 v3
版本/v1:
v1.wsdl
版本/v10:
v10.wsdl
版本/v2:
v2.wsdl
发布/v3:
v3.wsdl
运行脚本的输出:
run:
...
[copy] Copying releases\v10\v10.wsdl to my-out-dir\v10.wsdl
谢谢你的回复。根据我的要求,我无法根据修改或创建日期对其进行排序,因为这些文件夹可能会被修改以向老用户提供支持服务。我需要按文件夹名对其进行排序。我已经修改了代码。你能告诉我行不行吗?是的,那么你需要对它们进行排序,以确保它们按顺序排列。您的示例看起来不错,只需将iclud name更改为previews version,然后它将包含子目录中的所有文件。如果使用版本10,则可能会出现问题,因为10在基于ASCII的排序中介于1和2之间。例如:1,2,3,…,10,11将被排序为1,10,11,2,3,…。@Chad Nouis。谢谢。那么如何按目录名对其进行排序?因为我无法按修改或创建的日期对其进行排序。因为旧版本可能会被支持人员更改。请看我刚刚发布的答案。