如何在Ant中创建映射器指定的目录
给定一个文件集如何在Ant中创建映射器指定的目录,ant,build-process,directory-structure,Ant,Build Process,Directory Structure,给定一个文件集 <fileset id="myFiles" dir="."> <include name="**/*.file"/> </fileset> 如何在集合中的每个文件上创建一个子目录,以文件名命名,但不带扩展名 例如,给定folderA/X.file和folderA/folderB/Y.file文件,我想创建目录folderA/X和folderA/folderB/Y,以便任务在文件列表上迭代。但是我在Ant中没有遇到任何子字符串类型的
<fileset id="myFiles" dir=".">
<include name="**/*.file"/>
</fileset>
如何在集合中的每个文件上创建一个子目录,以文件名命名,但不带扩展名
例如,给定folderA/X.file和folderA/folderB/Y.file文件,我想创建目录folderA/X和folderA/folderB/Y,以便任务在文件列表上迭代。但是我在Ant中没有遇到任何子字符串类型的实用程序,您可以使用它剥离扩展并创建目录。一定要搜索这个实用程序,如果它不在那里,那么你需要实现一个Ant任务来完成它。很抱歉回答我自己的问题。除非有人知道其他情况,否则开箱即用的ANT似乎无法创建与文件集中的条目相关的目录(例如使用mkdir) Ant Contrib包含有用的for循环任务,正如Bhushan所建议的,它可能执行此类任务 最后,我编写了一个由ANT任务调用的批处理文件(apply任务可以迭代文件集)
批处理文件执行此操作的位置:
mkdir%~dp1%~n1
(为什么在ANT中做一些简单的事情如此困难?我遗漏了什么吗?ANT touch任务支持创建文件、父目录和文件名映射,因此可以用来实现这一点:
<target name="mkdirs">
<touch mkdirs="true">
<fileset dir="the_dir"/>
<mapper type="glob" from="*.file" to="the_dir/*/.tmp" />
</touch>
<delete>
<fileset dir="the_dir" includes="**/.tmp"/>
</delete>
</target>
这将在目标目录中创建临时文件(如果目录不存在,则创建目录),然后删除临时文件,留下所需的目录
<target name="mkdirs">
<touch mkdirs="true">
<fileset dir="the_dir"/>
<mapper type="glob" from="*.file" to="the_dir/*/.tmp" />
</touch>
<delete>
<fileset dir="the_dir" includes="**/.tmp"/>
</delete>
</target>