我有这样的文件夹结构:
wsdl/v1,----,v11
我需要将其所有文件复制到名为“latestVersion”的新文件夹中,我需要将复制顺序从v1维护到v11.所以要做到这一点,我需要在复制时按名称对目录进行排序.我的代码是这样的:
<copy todir="${srcdist.layout.dir}/etc/wsdl/latestVersion" flatten="true" overwrite="true" verbose="true"> <sort> <fileset dir="../../sdk/etc/wsdl"> <include name="**/*.wsdl"/> </fileset> </sort> </copy>
我希望复制从v1开始,到v11结束.但是,它复制如下:
v1,v10,v11,v2,v3,v4,v5,v6,v7,v8,v9
相反,我如何让Ant复制如下:
v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11您可以使用Ant脚本中嵌入的JavaScript对目录名称进行数字排序.
然后,您可以使用第三方Ant-Contrib library中的<for>
task一次一个地从已排序的目录中复制:
<dirset id="wsdl.dirs" dir="../../sdk/etc/wsdl" includes="v*"/> <script language="javascript"> <![CDATA[ var dirSet = project.getReference( "wsdl.dirs" ); var ds = dirSet.getDirectoryScanner( project ); var includes = ds.getIncludedDirectories(); var versions = []; for ( var i = 0; i < includes.length; i++ ) { var dirname = includes[i] // chop off the "v" from the front var dirVersion = dirname.substr(1); versions.push( dirVersion ); } versionsSorted = versions.sort(function (a, b) { return a - b; }); // the "list" of <for> takes a comma-delimited string project.setProperty( "versions", versionsSorted.join( ',' ) ); ]]> </script> <echo>sorted versions: ${versions}</echo> <for list="${versions}" param="version"> <sequential> <copy todir="${srcdist.layout.dir}/etc/wsdl/latestVersion"> <fileset dir="../../sdk/etc/wsdl/v@{version}" includes="**/*.wsdl"/> </copy> </sequential> </for>
精彩评论