迭代文件集的问题

时间:2014-12-10 13:52:01

标签: java ant ant-contrib

我尝试遍历wsdl的目录。对于第一个,我很高兴得到每个文件的输出。

<target name="messages">
    <foreach target="wsdlList" param="wsdlfile">
        <path>
            <fileset dir="${base.wsdl.src}">
                <include name="*.wsdl" />
            </fileset>
        </path>
    </foreach>
</target>

<target name="wsdlList">
    <echo message="${wsdlfile}" />
</target>

我得到的输出是wsdlList:       [echo] $ {wsdlfile} 而不是我期望的所有wsdl文件。

2 个答案:

答案 0 :(得分:1)

使用较新的<foreach>任务,而不是使用<for>。您需要在antlib.xml中指向antcontrib.properties而不是<taskdef>

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <fileset dir="${ivy.dir}/antcontrib">
            <include name="ant-contrib*.jar"/>
        </fileset>
    </classpath>
</taskdef>

现在,你可以这样做:

<target name="messages">
    <for param="wsdl.file">
        <fileset dir="${base.wsdl.src}">
            <include name="*.wsdl" />
        </fileset>
        <sequential>
            <echo message="@{wsdl.file}" />  <!-- Note "@" and not "$" -->
        </sequential>
    </for>
</target>

请注意,这是@{wsdl.file}而不是${wsdl.file}。这是一个每次都可以有不同值的参数。

答案 1 :(得分:0)

尝试将“messages”目标作为依赖项调用,以便设置wsdlfile属性:

<target name="wsdlList" depends="messages">
    <echo message="${wsdlfile}" />
</target>