如何在ant macrodef中使用文件集

  • 本文关键字:文件 macrodef ant ant
  • 更新时间 :
  • 英文 :


我想使用下面macrodef中的文件集。

我希望将属性jar更改为dir,以便可以处理dir中的所有jar文件。

<macrodef name="unjartemp">
    <attribute name="jar" />
    <sequential>
        <!-- Remove any existing signatures from a JAR file. -->
        <tempfile prefix="unjar-" 
        destdir="${java.io.tmpdir}" property="temp.file" />
        <echo message="Removing signatures from JAR: @{jar}" />
        <mkdir dir="${temp.file}" />
        <unjar src="@{jar}" dest="${temp.file}" />    
        <delete file="@{jar}" failonerror="true" />
    </sequential>
</macrodef>

为了保持灵活性,您可以为1-n个文件集使用带有嵌套元素属性的macrodef,例如
为嵌套文件集创建xml格式目录的macrodef:

<macrodef name="dir2xml">
 <attribute name="file"
  description="xmlfile for filelisting"/>
 <attribute name="roottag"
  description="xml root tag"/>
 <attribute name="entrytag"
  description="xml tag for entry"/>
 <element name="fs"
  description="nested filesets for listing"/>
 <sequential>
  <pathconvert
   property="files.xml"
   dirsep="/"
   pathsep="&lt;/@{entrytag}&gt;${line.separator} &lt;@{entrytag}&gt;"
  >
   <!-- 1-n nested fileset(s) -->
   <fs/>
  </pathconvert>
  <!-- create xmlfile -->
  <echo message="&lt;@{roottag}&gt;${line.separator} &lt;@{entrytag}&gt;${files.xml}&lt;/@{entrytag}&gt;${line.separator}&lt;/@{roottag}&gt;" file="@{file}"/>
  </sequential>
</macrodef>

用法:

<dir2xml file="filelistant.xml" entrytag="antfile" roottag="antfilelist">
 <fs>
  <fileset dir="." includes="**/*.xml"/>
  <fileset dir="../ant_xml" includes="**/*.xml"/>
 </fs>
</dir2xml>

添加文件集:

<fileset dir="${jars.dir}" id="jars_to_unjar">
    <include name="**/*.jar"/>
</fileset>

调用宏:

<unjartemp filesetref="jars_to_unjar"/>

你可以试试这个修改后的宏:

<macrodef name="unjartemp">
    <attribute name="filesetref" />
    <sequential>
        <for param="file">
            <fileset  refid="@{filesetref}"/>
            <sequential>
                <!-- Remove any existing signatures from a JAR file. -->
                <tempfile prefix="unjar-" 
                destdir="${java.io.tmpdir}" property="temp.file" />
                <echo message="Removing signatures from JAR: @{file}" />
                <mkdir dir="${temp.file}" />
                <unjar src="@{file}" dest="${temp.file}" />    
                <delete file="@{file}" failonerror="true" />
            </sequential>
        </for>
    </sequential>
</macrodef>

相关内容

  • 没有找到相关文章

最新更新