Задача 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
, будут использоваться по умолчанию.