Они могут быть несколько способов решить эту проблему, но ни один не так прост, как с помощью элемента муравей-вно. Я не уверен, что это даст вам то, что вам нужно для вашей заявки, но вы можете попробовать следующее:
Использование условных целей. Если вы можете заменить свой макродед на цель для вызова, это может сработать для вас. Обратите внимание, что это будет определять свойство глобально, поэтому оно может не работать для вашего приложения.
<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>
Обращайтесь с корпусом «еще». Если вам нужно обработать альтернативный случай, вам необходимо обеспечить несколько целей ...
<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.jar. Вы можете поместить его под папку «инструменты» и вытащить его в использовании taskdef:
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${basedir}/tools/ant-contrib.jar" />
Я предполагаю, что создание отдельного макроса для обработки этого недопустимо? – jheddings