ant - 如何生成 Ant 目标?

标签 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="${task}" />
        </exec>
    </target>
</foreach>

允许我运行 ant jspant js

但是,这段代码失败了,因为目标标签不能放在 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}" />

解释:

  • 使用 antcontrib <for> task优于 <foreach> , 否则你必须有一个单独的循环体目标。
  • 创建第二个构建文件,此处称为 mybuild.xml , 以包含您的目标。
  • 构建文件内容必须在 <project> 内元素。
  • Import构建文件。

然后您可以按照您希望的方式调用动态目标。

您也可以使用 <script> task如果您愿意,可以创建目标,这将消除对单独构建文件和导入的需要,如下所示:

<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>

关于ant - 如何生成 Ant 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28907144/

相关文章:

maven - 如何将所有 .thrift 文件 (*.thrift) 编译为 Maven 阶段?

apache-flex - Ant 任务 compc for air 错误

ant - 在 Sublime Text 2 中使用 Ant

java - 使用 Ant 构建在 xml 中替换值/版本/日期的占位符

ant-contrib - if/then/else 任务

hibernate - 如何在 Ant 构建中使用 cpp-tasks

tomcat - 如何从 Ant 脚本编译源代码

Ant 嵌套循环

java - 循环内循环迭代 6 次,但打印 9 次而不是 3 次