我想使用下面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="</@{entrytag}>${line.separator} <@{entrytag}>"
>
<!-- 1-n nested fileset(s) -->
<fs/>
</pathconvert>
<!-- create xmlfile -->
<echo message="<@{roottag}>${line.separator} <@{entrytag}>${files.xml}</@{entrytag}>${line.separator}</@{roottag}>" 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>