我正在Apache ANT上的一些代码块

<target name="workload">
        <script language="javascript"><![CDATA[
            println("<div id='collapseOne' class='accordion-body collapse in'><div class='accordion-inner'><pre>"); ]]>
        </script>

        <apply dir="${dir.publish.ini}" executable="java" parallel="false" failonerror="false">
            <fileset dir="${dir.ini}">
                <include name="**/*.ini"/>
            </fileset>
            <arg value="-jar" />
            <arg path="${tool}" />
            <srcfile/>
        </apply>

        <script language="javascript"><![CDATA[ println("</pre></div></div>"); ]]></script>
    </target>

当我使用<antcall target="workload"/>一切正常。

我必须优化此代码块。所以我尝试使用以下代码:
<macrodef name="workload">
            <script language="javascript"><![CDATA[
                println("<div id='collapseOne' class='accordion-body collapse in'><div class='accordion-inner'><pre>"); ]]>
            </script>

            <apply dir="${dir.publish.html}" executable="java" parallel="false" failonerror="false">
                <fileset dir="${dir.ini}">
                    <include name="**/*.ini"/>
                </fileset>
                <arg value="-jar" />
                <arg path="${tool}" />
                <srcfile/>
            </apply>

            <script language="javascript"><![CDATA[ println("</pre></div></div>"); ]]></script>
        </macrodef>

当我调用<antcall target="workload"/>时,它显示了以下错误:
macrodef doesn't support the nested "script" element.

macrodef不支持脚本!如何克服呢?还是有什么更好的方法来优化我的build.xml代码块?

最佳答案

您正在将目标内部的任务转换为macrodef以进行重用。在这种情况下,请捕获macrodef的sequential块内的逻辑。

http://ant.apache.org/manual/Tasks/macrodef.html

07-24 22:09