蚂蚁复制订单



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

 <copy todir="${srcdist.layout.dir}/etc/wsdl/latest"  flatten="true" overwrite="true">
 <fileset dir="../../releases">             
 <include name="**/*.wsdl"/>        
 </fileset>
 </copy>

这个代码对我来说很好(在centOS中(。它从v1开始复制,到v3结束。但我对这份复印单感到怀疑,怀疑它是否每次都有效。复制前是否对文件夹名称进行排序?请帮帮我。

我认为在复制时依赖<fileset>对文件的排序方式是不好的。因此,如果您可以尝试更改此逻辑,使用Ant-Contrib项目中的TimestampSelector来选择最新的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以来,您可以使用Last来获取最新的文件。在这里你可以找到一个例子。

来自Ant文档中的类路径结构:

某些资源集合类型,如文件集、目录集和文件在顺序上未定义。

因此,您不能依赖文件集来维护任何顺序。

相反,您可以使用JavaScript来查找"最新"的发布目录:

<!-- match directories starting with "v" under the "releases" directory -->
<dirset id="release.dirs" dir="releases" includes="v*"/>
<script language="javascript">
<![CDATA[
    var dirSet = project.getReference( "release.dirs" );
    var ds = dirSet.getDirectoryScanner( project );
    var includes = ds.getIncludedDirectories();
    var greatestVersion = 0;
    for ( var i = 0; i < includes.length; i++ )
    {
        var dirname = includes[i];
        // chop off the "v" from the front
        var dirVersion = dirname.substr(1);
        greatestVersion = Math.max( greatestVersion, dirVersion );
    }
    project.setProperty( "greatestVersion", greatestVersion );
]]>
</script>
<copy todir="my-out-dir" verbose="true">
    <fileset dir="releases/v${greatestVersion}" includes="**/*.wsdl"/>
</copy>

为了测试脚本,我在一个releases目录下创建了几个v#目录。每个目录都有一个*.wsdl文件。

$ ls -R releases/
releases/:
v1  v10  v2  v3
releases/v1:
v1.wsdl
releases/v10:
v10.wsdl
releases/v2:
v2.wsdl
releases/v3:
v3.wsdl

运行脚本的输出:

run:
     ...
     [copy] Copying releasesv10v10.wsdl to my-out-dirv10.wsdl

使用排序

<copy todir="${srcdist.layout.dir}/etc/wsdl/latest"  flatten="true" overwrite="true">
<sort>
 <fileset dir="../../releases">             
 <include name="**/*.wsdl"/>        
 </fileset>
</sort>
 </copy>

相关内容

  • 没有找到相关文章