Чи є завдання ANT, яке б виконувало блок лише за наявності певного файлу? У мене проблема, що у мене є загальний скрипт мурашника, який повинен виконувати якусь спеціальну обробку, але лише за наявності певного файлу конфігурації.
Чи є завдання ANT, яке б виконувало блок лише за наявності певного файлу? У мене проблема, що у мене є загальний скрипт мурашника, який повинен виконувати якусь спеціальну обробку, але лише за наявності певного файлу конфігурації.
Відповіді:
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
if
та unless
атрибути лише включають або відключають ціль, до якої вони приєднані, тобто залежності цілі завжди виконуються. Інакше це не спрацює залежно від цілі, яка встановлює властивість, яку ви перевіряєте.
<Available>
застаріле. Я використав це: <target name="do-if-abc" if="${file::exists('abc.txt')}"> ... </target>
перевірити: nant.sourceforge.net/release/0.85/help/functions/…
<available>
застаріло? 2: ${file::existst...}
начебто, не працює з Ant (Apache ANT 1.9.7)
Це може мати трохи більше сенсу з точки зору кодування (доступно з ant-contrib: http://ant-contrib.sourceforge.net/ ):
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
Оскільки Ant 1.8.0, мабуть, також існує ресурс
З http://ant.apache.org/manual/Tasks/conditions.html
Тестує ресурс на існування. з Мурахи 1.8.0
Фактичний ресурс для тестування задається як вкладений елемент.
Приклад:
<resourceexists> <file file="${file}"/> </resourceexists>
Я збирався переробити приклад з вищевказаної гарної відповіді на це питання, а потім знайшов це
Станом на Ant 1.8.0, ви можете використовувати розширення власності; значення true (або увімкнено або так) дозволить об'єкту ввімкнути, а false (або вимкнено чи ні) відключить його. Інші значення як і раніше вважаються іменами властивостей, тому елемент увімкнено, лише якщо визначено вказане властивість.
У порівнянні зі старішим стилем, це надає додаткової гнучкості, оскільки ви можете перекрити умову з командного рядка або батьківських скриптів:
<target name="-check-use-file" unless="file.exists"> <available property="file.exists" file="some-file"/> </target> <target name="use-file" depends="-check-use-file" if="${file.exists}"> <!-- do something requiring that file... --> </target> <target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>
із посібника з мурашниками за адресою http://ant.apache.org/manual/properties.html#if+unless
Сподіваємось, цей приклад корисний для деяких. Вони не використовують ресурсів, але, мабуть, ви могли б? .....
if="${file.exists}"
слід замінити , if="file.exists"
як if
і unless
перевіряти тільки наявність майна на ім'я, а не його значення.
Я думаю, що варто посилатися на подібну відповідь: https://stackoverflow.com/a/5288804/64313
Ось ще одне швидке рішення. На цьому можливі й інші варіанти за допомогою <available>
тегу:
# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
<condition><not>
<available file="${file}" />
</not></condition>
</fail>
DB_*/**/*.sql
Ось варіант виконання дії, якщо існує один або кілька файлів, що відповідають фільтру підстановки. Тобто ви не знаєте точної назви файлу.
Тут ми шукаємо файли " * .sql " у будь-яких підкаталогах під назвою " DB_ * ", рекурсивно. Ви можете налаштувати фільтр під свої потреби.
NB: Apache Ant 1.7 і вище!
Ось мета встановити властивість, якщо існують відповідні файли:
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
Ось "умовна" ціль, яка запускається лише за наявності файлів:
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>
Ви можете це зробити, наказавши виконати операцію зі списком файлів із іменами, рівними потрібним іменам. Набагато простіше і прямо, ніж створити спеціальну ціль. І вам не потрібні додаткові інструменти, просто чистий Мураш.
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>
Див.: FileSet .