Ant 如何生成蚂蚁目标?

Ant 如何生成蚂蚁目标?,ant,ant-contrib,Ant,Ant Contrib,我希望能够生成多个Ant目标,如下所示: <property name="grunt_tasks" value="jsp,css,js,img" /> <foreach list="${grunt_tasks}" param="task"> <target name="${task}"> <exec executable="grunt" failonerror="true"> <arg line

我希望能够生成多个Ant目标,如下所示:

<property name="grunt_tasks" value="jsp,css,js,img" />
<foreach list="${grunt_tasks}" param="task">
    <target name="${task}">
        <exec executable="grunt" failonerror="true">
            <arg line="${task}" />
        </exec>
    </target>
</foreach>
<for list="${grunt_tasks}" param="task">
    <sequential>
    <script language="javascript"><![CDATA[
        importClass(org.apache.tools.ant.Target);

        var exec = project.createTask( "exec" );
        exec.setExecutable( "grunt" );
        exec.setFailonerror( true );
        var arg = exec.createArg( );
        arg.setValue( "@{task}" );

        var target = new Target();
        target.addTask( exec );
        target.setName( "@{task}" );

        project.addOrReplaceTarget( target );
    ]]></script>
    </sequential>
</for>

允许我运行
antjsp
antjs

但是,此代码失败,因为无法在foreach标记中放置目标标记


如何实现这一点?

您可以通过多种方式动态添加目标。这里有一个建议:

<property name="mybuild" value="mybuild.xml" />

<property name="grunt_tasks" value="jsp,css,js,img" />

<echo message="&lt;project&gt;" file="${mybuild}" />
<for list="${grunt_tasks}" param="task">
    <sequential>
    <echo file="${mybuild}" append="yes"><![CDATA[
    <target name="@{task}">
        <exec executable="grunt" failonerror="true">
            <arg line="@{task}" />
        </exec>
    </target>
    ]]></echo>
    </sequential>
</for>
<echo message="&lt;/project&gt;" file="${mybuild}" append="yes"/>

<import file="${mybuild}" />

我并不热衷于生成另一个xml文件来实现这一点。我想我宁愿在build.xml中经历一些重复。我已经查看了脚本任务,但没有找到任何说明如何创建目标的文档。@Matthew添加了脚本方法。使用API的文档是源代码本身。是阅读的一种方式。我在阅读过程中学到了一些东西-load('nashorn:mozilla_compat.js');//因为我使用的是Java 8并使用importClass,换句话说,Rhino compatibility exec.createArg().setValue(“--target_env=“+target_env”);//由于某些原因,ant属性可直接用于js,尽管任务参数不可用。ug,格式化不是我的强项