Как проверить, что свойство или переменная пуста и установить значение, а затем проверить это значение - PullRequest
0 голосов
/ 04 октября 2019

Мы используем Ant 1.8. Я не разработчик Ant, но иногда мне приходится притворяться.

Новое свойство, $ {noReportDSUpgrade}, должно быть «истинным» или «ложным».

По умолчанию оно пустое (не существует?), Что является «ложным» для наших целей.

Если это свойство пустое, его следует установить на «ложное».

Командная строка, использующая этот параметр, должна установить для него значение true.

1) Как установить для $ {noReportDSUpgrade} значение false, если оно пустое, и значение true, если оно указано?

2) Для цели:как выполнить только если false?

Я пробовал несколько предложений, которые я нашел, но не могу заставить его работать.

В начале сценария:

<target name="init">
    <antcall target="setnoReportDSUpgradeProperty"/>

Далее:

<target name="setnoReportDSUpgradeProperty">
    <condition>
        <or>
            <equals arg1="${noReportDSUpgrade}" arg2=""/>
            <not>
                <isset property="false"/>
            </not>
       </or>
    </condition>
    <echo message="noReportDSUpgrade set to ${noReportDSUpgrade}"/>         
</target>

1 Ответ

0 голосов
/ 04 октября 2019

Вот как установить значение свойства по умолчанию в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...