Ant + Сохранение контрольного значения - PullRequest
0 голосов
/ 11 февраля 2010

Мне нужно сохранить контрольное значение (возможно, внутри файла), чтобы решить, выполнять задачу или нет.

Я иду отсюда: Муравей: Как вычесть два свойства (содержащие метки времени)?

Что я хочу сделать, это проверить, равно ли контрольное значение периоду (ммГГ). Если оно равно, ничего не будет сделано, но если это не так, контрольное значение должно быть обновлено.

Например:

<task dosomethingifcontrolvaluediffers>
control value is 0000
(calculated) property is: 0110
Then, control value should now be 0110.

</task>

Я думал о сохранении значения в отдельном файле, и если перезапись необходима, то обрезать файл и обновить, но

1) Не могу найти способ сделать это

2) Не знаю как.

3) Сценарии? Был бы мой любимый выбор, но не знаю, как в JS.

Есть мысли?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 11 февраля 2010

Должно быть сделано вне муравья. Напишите скрипт на любом языке, который вы знаете (bash, Python, JavaScript и т. Д.), Который выполняет вычисления, проверяет и вызывает Ant, используя это значение в качестве параметра, если необходимо.

Ant не предназначен для написания скриптовых языков. Люди попадают в беду, когда пытаются это сделать.

0 голосов
/ 11 февраля 2010

Как упомянул duffymo, Ant не является языком сценариев. Хотя вы можете использовать язык сценариев, такой как javascript, внутри Ant, подробности см. В scriptdef task . Вы можете определить свои собственные задачи, как это:

<scriptdef name="nameOfTheTask" language="javascript">
    <![CDATA[
        (your script goes here)
    ]]>
</scriptdef>

Вы можете использовать новое задание так:

<nameOfTheTask/>

Вы также упомянули, что вам нравится хранить значение в файле. Это можно сделать с помощью задачи echo :

<echo file="yourFile">aProperty=${aProperty}{line.separator}</echo>

Это записывает значение в файл yourFile . Например, вывод:

aProperty=some value

Вы можете снова прочитать значение в сценарии с помощью задачи loadproperties :

<loadproperties srcFile="yourFile" />
0 голосов
/ 11 февраля 2010

Я не пробовал, но вы можете сделать это:

используйте условное задание, например, так:

<condition property="exectask">
   <equals arg1="${prop1}" arg2="${prop2}" trim="true"/>
</condition>

А затем вызвать цель на основе значения свойства

<target name="dosomethingifcontrolvaluediffers" unless="${exectask}">
</target>

Надеюсь, это поможет.

...