Ant: как потерпеть неудачу, если свойство содержит определенную строку - PullRequest
8 голосов
/ 26 января 2011

Я хочу написать макрос ant, который будет вызывать задачу сбоя, если предоставленный атрибут содержит определенную строку. Единственный способ, которым я знаю, как сделать сравнение строк в муравейнике, это использовать javascript. У меня есть что-то вроде этого:

<macrodef name="check-for-error">
    <attribute name="input"/>
    <sequential>
        <echo message="@{input}"/>
        <script language="javascript">
            <![CDATA[
            var response= "@{input}";
            if(response.indexOf("FAIL") !=-1){
                project.setProperty("error","true");
            }
            ]]>
        </script>
        <fail message="INPUT FAILED" if="${error}"/>
    </sequential>
</macrodef>

Проблема этого подхода в том, что я устанавливаю глобальное свойство внутри javascript, и ant не позволяет вам сбросить свойство. Я знаю, что у муравья есть возможность устанавливать локальные свойства. Как я могу получить доступ к локальным свойствам из JavaScript? Или есть лучший способ сделать все это вместе?

Ответы [ 2 ]

8 голосов
/ 26 января 2011
<condition property="missing-properties">
    <matches pattern="YOUR-PATTERN" string="${THE-ATTRIBUTE}"/>
</condition>
<fail message="Input failed!" if="missing-properties"/>
1 голос
/ 23 июня 2011

Все, что вам нужно сделать, чтобы локализовать свойство, это вызвать local задачу для него перед Javascript.

Например:

<sequential>
    <echo message="@{input}"/>
    <local name="error"/>        <!-- Added this line. -->
    <script language="javascript">
    ...

Кроме того, вместо этого вы можете локализовать это свойство в Javascript:

<script language="javascript"><![CDATA[
    localiser = project.createTask( "local" );
    localiser.setName( "error" );
    localiser.perform( );

    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...