如何在ant macrodef中使用fileset

时间:2013-08-02 05:52:56

标签: ant

我想在下面的macrodef中使用fileset。

我希望将属性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>

2 个答案:

答案 0 :(得分:2)

为了保持灵活性,您可以将macrodef与嵌套元素属性一起用于1-n文件集,例如 一个macrodef,它在xmlformat中为嵌套文件集创建一个dirlisting:

<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>

答案 1 :(得分:0)

添加文件集:

<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>