Ant - 使用Macrodef的资源联合

时间:2018-03-28 17:59:03

标签: ant

我有一个具有<element>占位符的Ant Macrodef。我正在尝试使用<element>传递resourceCollection进行处理。在调用macrodef之前,正确填充<element>的内容。不幸的是,在调用期间,它是空的。

Macrodef:

<macrodef name="doStuff" description="Amazing macrodef that fails me.">
    <element name="fs" optional="true" description="resource/element/fileset to be manipulated />
    <sequential>
        <echo message="fs: ${toString:fs}" />
        <pathconvert property="outputProp" pathsep=" ">
            <fs />
        </pathconvert>
    </sequential>
</macrodef>

并通过以下build.xml文件调用它:

<fileset id="files1" dir=".">
    <include name="inc/*" />
    <include name="lib/*" />
</fileset>
<fileset id="files2" dir=".">
    <include name="bin/*" />
</fileset>
<union id="allFiles">
    <resources refid="files1" />
    <resources refid="files2" />
</union>

<target name="doStuffToFiles">
     <doStuff>
         <fs>
             <resources refid="allFiles" />
         </fs>
      </doStuff>
 </target>

1 个答案:

答案 0 :(得分:0)

我不确定为什么,但是通过联合和资源,而不是使用带有refid的直接文件集,似乎让我的Ant设置混乱。以下内容适用于Ant 1.9.2

<macrodef name="doStuff" description="Amazing macrodef that fails me.">
    <element name="fs" 
             optional="false" 
             description="resource/element/fileset to be manipulated />
    <sequential>
        <pathconvert property="outputProp" pathsep=" ">
            <fs />
            <map from="${basedir}/" to=""/>
        </pathconvert>
    </sequential>
</macrodef>


<target name="doStuffToFiles">
    <fileset id="files1" dir=".">
        <include name="inc/**"/>
        <include name="lib/**"/>
    </fileset>
    <fileset id="files2" dir=".">
        <include name="bin/**"/>
    </fileset>

    <doStuff>
        <fs>
            <fileset refid="files1" />
            <fileset refid="files2" />
        </fs>
    </doStuff>
</target>