2013-08-02 58 views
3

我想在下面的macrodef中使用fileset。如何在ant宏中使用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> 

回答

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

爲了保持靈活,你可以使用具有嵌套元素屬性的macrodef對於1-n文件集,f.e.
在xmlformat嵌套文件集創建一個dirlisting一個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>