Вот как установить значение свойства по умолчанию в Ant:
<property name="noReportDSUpgrade" value="false" />
Вот и все! Свойства являются неизменяемыми в Ant, поэтому, если вы устанавливаете значение через командную строку или ранее в сценарии, последующие <property>
задачи не изменят его. Это не приведет к тому, что для свойства будет задано пустое значение (т. Е. ""), Но, как правило, рекомендуется избегать установки пустых свойств.
Даже если я не считаю, что вам нужно<condition>
задача для ваших целей здесь, я чувствую, что я должен прояснить некоторые вещи в вашем примере. Задача <condition>
не влияет на <target>
, в которую она вложена;он просто устанавливает свойство, указанное атрибутом property
. Кроме того, атрибут property
условия isset
используется для указания имени проверяемого свойства, а не на значение.
<condition property="noReportDSUpgrade">
<or>
<equals arg1="${noReportDSUpgrade}" arg2=""/>
<not>
<isset property="noReportDSUpgrade" />
</not>
</or>
</condition>
Но, как я уже говорил выше, не используйте это, если вам действительно не нужно проверять пустое значение по какой-то причине. Просто используйте <property>
.
Что касается условного запуска целей, блок <target>
поддерживает атрибуты if
и unless
, которые управляют работой всего объекта. Это может немного сбивать с толку, потому что есть два режима, в которых это работает.
<target name="myTarget" if="myCondition">
<echo message="Running myTarget" />
</target>
Вышеуказанная цель будет работать, если myCondition
установлен (не если его значение истинно),Таким образом, если он оценивается как «true», «false», «asdf» или просто пусто, цель все равно будет работать. И наоборот, если бы мы использовали атрибут unless
, он не запустился бы, если бы для myCondition
было установлено что-либо. Обычно это удобно, когда вы используете задачу <condition>
для установки своих свойств (поскольку <condition>
не устанавливает значение, если логическое значение оценивается как false).
<target name="myTarget" if="${myCondition}">
<echo message="Running myTarget" />
</target>
Обратите внимание на ${}
вокруг myCondition. Когда вы развернете это свойство, Ant будет запускать целевой объект только в том случае, если для свойства установлено значение «true», «on» или «yes».
Наконец, вам обычно не нужно создавать отдельныйцель только для установления условий. В относительно простых сценариях вы можете просто использовать имплицитную корневую цель (т. Е. Поместить задачи на корневом уровне вне всех других целей).
Короче, вот самый простой способ написания сценария.
<project name="myProject">
<property name="noReportDSUpgrade" value="false" />
<target name="myTarget" if="${noReportDSUpgrade}">
<echo message="Running myTarget" />
</target>
</project>
Если вам действительно нужна цель инициализации (обратите внимание на атрибут depends
):
<project name="myProject">
<target name="init">
<property name="noReportDSUpgrade" value="false" />
</target>
<target name="myTarget" if="${noReportDSUpgrade}" depends="init">
<echo message="Running myTarget" />
</target>
</project>