Ant 蚂蚁嵌套循环
我有两个txt文件:File1.txt–包含src dir的列表;和File2.txt–包含dest dir的列表。我需要使用从src dir到dest dir的循环进行复制 File1.txt(SVN结构) File2.txt(LINUX结构) 我需要将abcBIN文件目录复制到apps/xxx/yyy/bin/abc等等。一对一映射Ant 蚂蚁嵌套循环,ant,copy,ant-contrib,Ant,Copy,Ant Contrib,我有两个txt文件:File1.txt–包含src dir的列表;和File2.txt–包含dest dir的列表。我需要使用从src dir到dest dir的循环进行复制 File1.txt(SVN结构) File2.txt(LINUX结构) 我需要将abcBIN文件目录复制到apps/xxx/yyy/bin/abc等等。一对一映射 <project xmlns:ac="antlib:net.sf.antcontrib"> <taskdef resource="net/s
<project xmlns:ac="antlib:net.sf.antcontrib">
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="path-to-ant-contrib.jar"/>
</classpath>
</taskdef>
<loadfile property="file1" srcfile="File1.txt"/>
<loadfile property="file2" srcfile="File2.txt"/>
<ac:for param="i" list="${file1}">
<ac:for param="j" list="${file2}">
<sequential>
<echo>@{i}@{j}</echo>
<echo>copying....</echo>
<property name="src.dir" value="/home/name/svn_repo/dir" />
<property name="dest.dir" value="/home/name/mapp" />
<copy todir="${dest.dir}/@{j}">
<fileset dir="${src.dir}/@{i}">
</fileset>
</copy>
</sequential>
</ac:for>
</ac:for>
</project>
我不能使用unixshell或Perl。它必须在Ant中完成
如果您对Ant中的嵌套循环有更好的了解,请告诉我。@PulakAgrawal:我使用冒号作为行分隔符将两个文本文件合并为一个,魔法开始了:) e、 g.src路径:dest路径
<loadfile property="allfiles" srcFile="mapping"/>
<ac:for list="${allfiles}" param="line" delimiter="${line.separator}">
<ac:sequential>
<ac:propertyregex property="from" input="@{line}" regexp="(.*):(.*)" select="\1" override="true"/>
<ac:propertyregex property="to" input="@{line}" regexp="(.*):(.*)" select="\2" override="true"/>
<echo>Copying dir ${from} to ${to} ...</echo>
<property name="src.dir" value="." /> <property name="dest.dir" value="." />
<copy todir="${dest.dir}/${to}"> <fileset dir="${src.dir}/${from}"> </fileset> </copy>
</ac:sequential>
</ac:for>
正在将目录${from}复制到${to}。。。
我需要复制(file.txt dir到file2.txt dir),例如abcBIN files dir到apps/xxx/yyy/bin/abc等等。一对一映射。如果你真的想这样做,你需要把第二个
放在
里面,而且,你还需要把..
部分放在第二个
里面。如果我使用你提到的逻辑,那么酷吧。它不适用于一对一映射。e、 g.从src接一行,然后从dest接一行dir@ShwetaChandrakar您可以发布您的解决方案,以便其他人可以从中受益。@ShwetaChandrakar我需要知道这个解决方案。。感谢感谢;您可能希望将此标记为答案,以便其他人可以从中受益。尽管此操作有效。。我称之为黑客@失败了,艾德夫,怎么了?你能想出一个更干净的解决办法吗?@PulakAgrawal:好吧,这不是黑客攻击。这是我在ANT中使用的内置命令。实际的文本文件是单个文件。我确实是为了方便才把它分开的。然后我想到了使用原始版本。@PulakAgrawal:如果你仍然认为它没有用,那么我很乐意将它从论坛中删除。这就是我以前没有发布答案的原因。你让我这么做的时候我就这么做了。我是新来的蚂蚁。我可能没有给你最好的。:)请不要拿走任何东西。这是一个有效的答案,因为它确实起作用。这将对许多人有用。至少我把它放在了我最喜欢的清单上。根据我的经验,我可以告诉你,你已经是前10%的ANT开发者了,所以不用担心。如果你不喜欢“hack”这个词,好吧,但我仍然认为它不是一个干净的解决方案,因为我们正在从操作系统进行处理,然后到一个文件(其中包含LS???的输出),然后返回操作系统进行复制。如果我能想出一个更干净的,我会回答自己:)
<project xmlns:ac="antlib:net.sf.antcontrib">
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="path-to-ant-contrib.jar"/>
</classpath>
</taskdef>
<loadfile property="file1" srcfile="File1.txt"/>
<loadfile property="file2" srcfile="File2.txt"/>
<ac:for param="i" list="${file1}">
<ac:for param="j" list="${file2}">
<sequential>
<echo>@{i}@{j}</echo>
<echo>copying....</echo>
<property name="src.dir" value="/home/name/svn_repo/dir" />
<property name="dest.dir" value="/home/name/mapp" />
<copy todir="${dest.dir}/@{j}">
<fileset dir="${src.dir}/@{i}">
</fileset>
</copy>
</sequential>
</ac:for>
</ac:for>
</project>
ac:for doesn't support the nested "for" element
<loadfile property="allfiles" srcFile="mapping"/>
<ac:for list="${allfiles}" param="line" delimiter="${line.separator}">
<ac:sequential>
<ac:propertyregex property="from" input="@{line}" regexp="(.*):(.*)" select="\1" override="true"/>
<ac:propertyregex property="to" input="@{line}" regexp="(.*):(.*)" select="\2" override="true"/>
<echo>Copying dir ${from} to ${to} ...</echo>
<property name="src.dir" value="." /> <property name="dest.dir" value="." />
<copy todir="${dest.dir}/${to}"> <fileset dir="${src.dir}/${from}"> </fileset> </copy>
</ac:sequential>
</ac:for>