如何在Ant中创建映射器指定的目录

时间:2009-02-11 12:12:34

标签: 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

3 个答案:

答案 0 :(得分:3)

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>

这将在目标目录中创建临时文件(如果不存在则创建目录),然后删除临时文件,留下您想要的目录。

答案 1 :(得分:1)

您将用于任务迭代文件列表。但我没有在Ant中遇到任何子字符串类型的实用程序,您可以使用它来剥离扩展并创建目录。搜索此实用程序,如果不存在,则需要执行Ant任务来执行此操作。

答案 2 :(得分:0)

很抱歉回答我自己的问题。除非有人知道,否则开箱即用的ANT似乎无法相对于文件集中的条目创建目录(例如使用mkdir)。

Ant-Contrib包含对循环任务有用,正如Bhushan建议的那样,它可能会执行这类任务。

有一些更好的东西要继续使用,所以最后,我只写了一个由ANT任务调用的批处理文件(应用任务可以迭代文件集)。

<apply executable="cmd" failonerror="1">
    <arg value="/c"/>
    <arg line="build\tools\makeRelDir.bat"/>
    <fileset dir=".">
        <include name="**/*.file"/>
    </fileset>
</apply>

批处理文件执行此操作: mkdir%~dp1%~n1

(为什么在ANT中做一些简单的事情很难?我错过了什么吗?)