Это может быть несколько способов решить эту проблему, но ни один из них не так прост, как использование элемента ant-contrib. Я не уверен, что это даст вам то, что вам нужно для вашего приложения, но вы можете попробовать следующее:
Использование условных целей. Если вы можете заменить свою макроопределение на цель для вызова, это может сработать для вас. Обратите внимание, что это установит свойство глобально, поэтому оно может не работать для вашего приложения.
<target name="default">
<condition property="platformIsProd">
<equals arg1="${platform}" arg2="prod" />
</condition>
<antcall target="do-buildstamp" />
</target>
<target name="do-buildstamp" if="platformIsProd">
<echo>doing prod stuff...</echo>
</target>
Обрабатывать случай 'else'. Если вам нужно обработать альтернативный случай, вам нужно указать несколько целей ...
<target name="default">
<property name="platform" value="prod" />
<antcall target="do-buildstamp" />
</target>
<target name="do-buildstamp">
<condition property="platformIsProd">
<equals arg1="${platform}" arg2="prod" />
</condition>
<antcall target="do-buildstamp-prod" />
<antcall target="do-buildstamp-other" />
</target>
<target name="do-buildstamp-prod" if="platformIsProd">
<echo>doing internal prod stuff...</echo>
</target>
<target name="do-buildstamp-other" unless="platformIsProd">
<echo>doing internal non-prod stuff...</echo>
</target>
Использование внешнего файла сборки. Если вам нужно сделать несколько вызовов с различными значениями для вашего свойства, вы можете изолировать это в другом файле сборки в пределах одного проекта. Это немного снижает производительность, но вам не понадобится дополнительная библиотека.
в build.xml:
<target name="default">
<ant antfile="buildstamp.xml" target="do-buildstamp" />
<ant antfile="buildstamp.xml" target="do-buildstamp">
<property name="platform" value="prod" />
</ant>
<ant antfile="buildstamp.xml" target="do-buildstamp">
<property name="platform" value="nonprod" />
</ant>
</target>
в buildstamp.xml:
<condition property="platformIsProd">
<equals arg1="${platform}" arg2="prod" />
</condition>
<target name="do-buildstamp">
<antcall target="do-buildstamp-prod" />
<antcall target="do-buildstamp-other" />
</target>
<target name="do-buildstamp-prod" if="platformIsProd">
<echo>doing external prod stuff...</echo>
</target>
<target name="do-buildstamp-other" unless="platformIsProd">
<echo>doing external non-prod stuff...</echo>
</target>
Добавить ant-contrib в ваш проект. Конечно, если вы можете добавить файл в ваш проект, проще всего будет просто добавить файл ant-contrib.jar. Вы можете поместить его в папку «tools» и вставить его с помощью taskdef:
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${basedir}/tools/ant-contrib.jar" />