Передача параметра ANT по ссылке - PullRequest
2 голосов
/ 15 февраля 2011


Я очень плохо знаком с ANT-скриптингом и использую его для автоматизации ежедневных сборок в моем проекте.Я использую его в большей степени в смысле сценариев (XML-файлов) и агрегирования уже существующих функций, а также придумываю процесс сборки.

Мне кажется, у меня возникли некоторые базовые проблемы с пониманием концепции antcall / target.Особенно, когда antcall сделан с параметром, Как C ++, есть ли способ вызвать целевой параметр будет передаваться по ссылке?так что значение, измененное в цели, может быть получено вызывающей стороной?

В приведенном ниже примере я хочу проверить, совпадают ли два файла, и отобразить результат, но для приведенного ниже примера я бы получил выводкак


являются одинаковыми файлами: $ {isFileName}


Пример:

< target name="checkFileAreSame">
< condition property="isFileSame">
< filesmatch file1="a.txt" file2="b.txt"/>
< /condition >
< /target >

< target name="Maintask">
< antcall target="checkFileAreSame">
< param name="isFileSame" value="false">
< /antcall >
< echo message="Are files Same : ${isFileSame}"/>
< /target >


Спасибо за ваш вклад заранее.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Похоже, вам нужна задача AntCallBack из пакета ant-contrib (отдельно от ядра Ant).

Ant-contrib - очень полезная библиотека, если вы недовольны (как и многие другие) "декларативным" стилем потоков Ant.

См. Здесь:

http://ant -contrib.sourceforge.net /

http://ant -contrib.sourceforge.net / tasks / tasks / index.html

http://ant -contrib.sourceforge.net / задачи / задачи / antcallback_task.html

2 голосов
/ 15 февраля 2011

Ant свойства неизменны - после установки их значения не могут быть изменены.

При использовании задачи antcall обратите внимание, что:

Вызванные цели запускаются в новом проект; знать, что это означает свойства, ссылки и т. д., установленные названные цели не сохранятся в вызывающий проект.

Но также обратите внимание, что свойства, которые вы передаете вызываемой цели с помощью атрибутов 'antcall' param, являются неизменными в вызываемой цели. Это означает, что в приведенном примере задачи «условие»:

<condition property="isFileSame">
    <filesmatch file1="a.txt" file2="b.txt"/>
</condition>

свойство isFileSame уже установлено вызывающей стороной на false, и поэтому останется ложным независимо от сравнения файлов.

Чаще всего объявляют зависимости между целями следующим образом:

<target name="checkFileAreSame">
    <condition property="isFileSame">
        <filesmatch file1="a.txt" file2="b.txt"/>
    </condition>
</target>

<target name="Maintask" depends="checkFileAreSame">
    <echo message="Are files Same : ${isFileSame}"/>
</target>

Ant определит, что граф вызовов для 'Maintask' требует, чтобы сначала был запущен 'checkFileAreSame'.

...