Ant условно, если внутри макродефа

Внутри ant у меня есть macrodef.

Предполагая, что я должен использовать этот макрокоманд, и есть элемент внутри указанного макродефа, который я хочу запустить, если свойство special.property существует и истинно, что я делаю?

В настоящее время у меня

<macrodef name="someName">
    <sequential>
        <someMacroDefThatSetsTheProerty  />
        <some:thingHereThatDependsOn if="special.property" />
    <sequential>
</macrodef>

Что не работает - some: thingHereThatDependsOn не имеет атрибута "if", и я не могу добавить его к нему.

antcontrib недоступен.

С целью я могу указать цель "if", что я могу сделать с помощью макродеформа?

Ответ 1

В Ant 1.9.1 и выше теперь появилась новая реализация атрибутов if и unless . Это может быть то, о чем вы думаете.

Во-первых, вам нужно поместить их в пространство имен. Добавьте их в заголовок <project>:

<project name="myproject" basedir="." default="package"
    xmlns:if="ant:if"
    xmlns:unless="ant:unless">

Теперь вы можете добавить их почти к любой задаче или субъекту Ant:

<!-- Copy over files from special directory, but only if it exists -->
<available property="special.dir.available"
    file="${special.dir} type="dir"/>

<copy todir="${target.dir}>
    <fileset dir="${special.dir}" if:true="special.dir.available"/>
    <fileset dir="${other.dir}"/>
</copy>

<!-- FTP files over to host, but only if it on line-->
<condition property="ftp.available">
    <isreachable host="${ftp.host}"/>
</condition>

<ftp server="${ftp.host}" 
    userid="${userid}"
    passowrd="${password}"
    if:true="ftp.available">
    <fileset dir=".../>
</ftp>

Ответ 2

Это возможно, только если задача ANT "thingHereThatDependsOn" поддерживает атрибут "if".

Как указано выше, условное выполнение в ANT, как правило, применяется только к целям.

<target name="doSomething" if="allowed.to.do.something">
   ..
   ..
</target>

<target name="doSomethingElse" unless="allowed.to.do.something">
   ..
   ..
</target>

<target name="go" depends="doSomething,doSomethingElse"/>