Ant 蚂蚁拷贝拷贝命令

Ant 蚂蚁拷贝拷贝命令,ant,build-automation,Ant,Build Automation,我是ant的新手,我想知道ant副本是如何决定复制顺序的。问题是,我有一个这样的文件夹结构:releases/v1、v2、v3。将为每个新版本创建文件夹。这些文件夹中的文件名将相似。需要将最新版本复制到名为“latest”的文件夹中。在这种情况下,需要将v3复制到“latest”文件夹中。所以我的逻辑是一个接一个地复制到“latest”文件夹中,并覆盖这些文件,最后将保留最新的文件。我的代码是这样的 <copy todir="${srcdist.layout.dir}/etc/wsdl/

我是ant的新手,我想知道ant副本是如何决定复制顺序的。问题是,我有一个这样的文件夹结构:releases/v1、v2、v3。将为每个新版本创建文件夹。这些文件夹中的文件名将相似。需要将最新版本复制到名为“latest”的文件夹中。在这种情况下,需要将v3复制到“latest”文件夹中。所以我的逻辑是一个接一个地复制到“latest”文件夹中,并覆盖这些文件,最后将保留最新的文件。我的代码是这样的

 <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。谢谢。那么如何按目录名对其进行排序?因为我无法按修改或创建的日期对其进行排序。因为旧版本可能会被支持人员更改。请看我刚刚发布的答案。