2015-09-22 56 views
2

我是新来的蚂蚁,我想知道蚂蚁复制如何决定复制顺序。问题是,我有一个像这样的文件夹结构releases/v1,v2,v3。将为每个新版本创建文件夹。并且这些文件夹中的文件名称会相似。并且需要将最新版本复制到名为'latest'的文件夹中,因此需要将v3复制到'latest'中。所以我的逻辑是一个一个地复制到'最新'文件夹并覆盖文件,最新的文件将保留在最后。我的代码是这样的。ant copy copy order

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

此代码适用于我(在centOS中)。它开始从v1复制到v3结束。但是我对这个复制命令感到怀疑,这个复制命令是否会每次都起作用。复制todir复制之前排序文件夹名称?请帮帮我。

回答

2

我认为依靠<fileset>如何在复制时订购文件并不好。因此,如果您可以尝试更改此逻辑以使用Ant-Contrib project中的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}"/> 

或者因为蚂蚁1.7.1可以使用Last以获取最新的文件。在这里你可以找到一个example

+1

感谢你的回复。根据我的要求,我无法根据修改或创建的日期对其进行排序,因为这些文件夹可能会被修改以向旧用户提供支持服务。我需要按文件夹名称排序。我修改了代码。你能告诉我它会好吗? Anush

+0

是的,那么你需要对它们进行排序,以确保按顺序。你的例子似乎是好的,只需将iclud名称更改为预览版本,那么它将包含子目录中的所有文件。 – Stanislav

1

Ant文档中使用排序

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

如果版本10可能会导致问题,因为“10”在ASCII中的“1”和“2”之间基于排序。例如:'1,2,3,...,10,11'将被分类为“1,10,11,2,3 ......”。 –

+0

@Chad Nouis。谢谢。那么如何按目录名排序呢?因为我无法按修改或创建日期对其进行排序。因为旧版本可能会被支持人员更改。 – Anush

+0

看看我刚​​刚发布的答案。 –

1

Path-like Structures

...某些资源集合类型,如文件集,dirset和文件 在顺序方面不确定。

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

相反,您可以诉诸使用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 releases\v10\v10.wsdl to my-out-dir\v10.wsdl