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"/>