Для пользователей, которые регистрируются. Если Вам не приходит письмо с подтверждением email, пишите на admin[at]quizful[dot]net - будем подтверждать вручную. Просим прощения за доставленные неудобства.

С уважением,
команда Quizful
Знаете ли Вы, что

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

Топ контрибуторов
loading
loading
Лента обновлений
ссылка Feb 10 23:41
Комментарий от sick_puppie:
здесь речь идет о top-level классах
ссылка Feb 10 19:16
Добавлен вопрос в тест C++ - Основы
ссылка Feb 10 17:54
Комментарий от a_w:
Прочитав всё это я вернулся и удостоверился, что всё ещё нах...
ссылка Feb 10 15:59
Добавлен вопрос в тест C++ - Средний уровень
ссылка Feb 10 15:35
Комментарий от hazartilirot:
Повторюсь, на решение таких вопросов одной минуты м...
Статистика

Тестов: 130, вопросов: 5785. Пройдено: 113023 / 461405.

О многократном использовании кода в Apache Ant

head tail Информация о статье
категория
Java Tools
дата16.06.2010
авторSkvorec
голосов3
Перед прочтением статьи очень рекомендую прочесть большое пособие по ant.

Самый простой способ использовать код несколько раз - это использовать атрибут depends у target-ов. Этот атрибут служит для выстраивания последовательности выполнения таргетов и имеет ряд особенностей:

  1. Таргет, выполнение которого вызывается атрибутом depends может быть выполнен только до основного таргета
  2. Если в цепочке depends-ов вызов одного и того же таргета содержится два и более раз, выполняться этот таргет будет всего один раз
  3. Все проперти и path-like structures, определенные в таргете, вызыванном атрибутом depends, будут доступны из основного таргета
Эти три особенности делают атрибут depends незаменимым при построении зависимостей между таргетами. Для примера рассмотрим следующий кусочек build.xml:

<target name="init">

<property name="compile.dir" location="C:/output/classes"/>
<mkdir dir="${compile.dir}"/>
<path id="compile_path"/>

</target>

<target name="compile-classes" depends="init">
<javac .... todir="${compile.dir}">
<classpath refid="compile_path"/>
</javac>

</target>

<target name="packaging" depends="init, compile-classes"/>

<target name="deploy" depends="init, compile-classes, packaging"/>

Пример выше показывает, во-первых, переиспользование проперти compile.dir и path-а compile_path, а во-вторых, структуру build.xml, в котором каждый из таргетов compile-classes, packaging и deploy может быть вызван отдельно и независимо.


Второй способ переиспользования кода - это таски ant и antcall. Отличаются они лишь тем, что таск <antcall/> позволяет выполнить таргет из текущего build.xml, а таск <ant/> позволяет запустить абсолютно любой build.xml, находящийся на вашем компьютере. В остальном эти таски одинаковы и имеют следующие особенности:

  1. С помощью них можно вызвать выполнения кода в любом месте таргета, а не только в самом начале
  2. При вызове таргета с помощью ant/antcall таргету можно передавать проперти, подобно передаче функции её аргументов
  3. Эти таски "форкают" новый ant-проект, и все проперти и пути, заданные в нём, нам нельзя будет переиспользовать.
Для ясности рассмотрим следующий кусочек build.xml:

<target name="delete-subdir">
<delete dir="${super.dir}/classes"/>
<property name="deleted.dir" value="${super.dir}"/>
</target>

<target name="main">
<antcall target="delete-subdir">
<param name="super.dir" value="c:/output1"/>
</antcall>
<echo message="${deleted.dir}"/>
<antcall target="delete-subdir">
<param name="super.dir" value="c:/output2"/>
</antcall>
<echo message="${deleted.dir}"/>
</target>

Этот кусочек кода хорош всем - он удалит директории c:/output1/classes и c:/output2/classes, но вот только проперти deleted.dir проставлено не будет, и таск 
<echo message="${deleted.dir}"/> выведет на экран ${deleted.dir} вот прямо со знаком $ и скобочками.

А что же делать, если надо ко всему прочему, сделать, чтобы проперти сохранялись? В этом нам поможет таск macrodef.

Итак, третий способ переиспользования кода - таск macrodef.
Он очень похож на antcall, только входящие данные в него передаются как атрибуты, а не вложенные параметры, и он новый ant-проект не форкает.

Рассмотрим пример:

<macrodef name="installComponent">
<attribute name="name"/>
<sequential>
<!-- code -->
<peoperty name="@{name}.installed" value="successfull"/>
</sequential>
</macrodef>

<target name="main">
<installComponent name="webComponent"/>
<echo message="${webComponent.installed}"/>
</target>


Этот код выведет на экран сообщение successful.

На этой successful ноте статья кончается.

Если Вам понравилась статья, проголосуйте за нее

Голосов: 3  loading...
art   Skvorec   yohan