3

我想在下面的宏定义中使用文件集。

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

2 回答 2

2

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

<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>
于 2014-06-26T11:19:34.823 回答
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>
于 2014-06-26T09:43:27.930 回答