为一组选定的项目执行选定的Ant任务

时间:2019-02-26 15:38:14

标签: build ant

我已经为我们的游戏定义了ant的目标,例如干净,build-ios,build-android,deploy-ios,deploy-android等。现在,我想定义一组代表我们的游戏的新目标,例如game1,game2,game3。

我的目标是能够启动带有一组目标游戏和一组目标任务的蚂蚁,以便针对每个选定的游戏执行每个选定的任务。

示例伪代码:Foreach [game1, game3]: clean, build-ios, deploy-ios

如何用蚂蚁来实现?要求是定义通过目标选择哪些游戏和哪些任务,而不是将它们写入手动更改的文件中。

1 个答案:

答案 0 :(得分:1)

subant任务对于具有多个共享相似结构的子项目的情况很有用。

在您的主要build.xml文件中,定义一个目标,该目标可以在游戏子目录上擦除所需的构建目标以及所有通用的构建目标。

<target name="deploy-all">
    <subant target="deploy">
        <dirset dir="." includes="game-*" />
    </subant>

    <echo message="All games deployed." />
</target>

<target name="deploy" depends="deploy-ios,deploy-android">
    <echo message="${ant.project.name} build complete." />
</target>

<target name="clean">
    <echo message="Cleaning ${ant.project.name}" />
</target>

<target name="build-ios" depends="clean">
    <echo message="Building iOS ${ant.project.name}" />
</target>

<target name="build-android" depends="clean">
    <echo message="Building Android ${ant.project.name}" />
</target>

<target name="deploy-ios" depends="build-ios">
    <echo message="Deploying iOS ${ant.project.name}" />
</target>

<target name="deploy-android" depends="build-android">
    <echo message="Deploying Android ${ant.project.name}" />
</target>

然后,在game- *子目录中,创建一个简单的build.xml并将其链接回通用目录。​​

game-1 / build.xml:

<project name="game-1" default="build">
    <import file="../build.xml" />

    <echo message="=== Building Game 1 ===" />
</project>

game-2 / build.xml:

<project name="game-2" default="build">
    <import file="../build.xml" />

    <echo message="=== Building Game 2 ===" />
</project>

编辑:如果您的构建需要基于用户的输入或预定义的属性来包含/排除某些子项目,则可以修改subant任务的嵌套资源集合以适应此需求。

    <property name="game.includes" value="game-*" />
    <property name="game.excludes" value="" />

    <subant target="deploy">
        <dirset dir="." includes="${game.includes}" excludes="${game.excludes}" />
    </subant>

然后,用户可以运行一个命令,该命令可以有选择地传递game.includes和/或game.excludes的值。如果未指定这些属性,则由property任务定义的值将用作默认值。