Прежде всего, Плющ не Maven ;)
Maven2 - это инструмент управления и понимания программных проектов, а Ivy - только инструмент управления зависимостями.
Ivy в значительной степени опирается на уникальную концепцию под названием configuration .
В Ivy конфигурация модуля - это способ использования или просмотра модуля .
Например, вы можете иметь тестовую и исполняемую конфигурацию в вашем модуле. Но вы также можете иметь конфигурацию MySQL и Oracle. Или конфигурация Hibernate и JDBC.
В каждой конфигурации вы можете объявить:
- какие артефакты (фляга, война, ...) требуются.
- ваши зависимости от других модулей и опишите, какая конфигурация зависимости вам нужна. Это называется отображением конфигурации.
Таким образом, атрибут conf делает именно это: Описывает сопоставление конфигурации для зависимости.
Отображенный дочерний элемент является вашей "правой стороной символа ->
" и представляет имя сопоставленной конфигурации зависимости. '*'
Подстановочный знак может использоваться для обозначения всех конфигураций этого модуля.
Maven2 на своей стороне имеет то, что называется scope .
Вы можете объявить зависимость как часть области тестирования или области времени сборки.
Затем в зависимости от этой области вы получите артефакт зависимости (только один артефакт на модуль в maven2) с зависимостями, зависящими от их области. Области предопределены в maven2, и вы не можете это изменить.
Это значит:
Для многих библиотек загружено много ненужных зависимостей.
Например, Hibernate загружает несколько JAR-файлов JBoss, а Display Tag загружает все JAR-файлы различных веб-фреймворков. Я обнаружил, что исключаю почти столько же зависимостей, сколько добавил.
Проблема в том, что hibernate может использоваться с несколькими реализациями кэша, несколькими реализациями пула соединений ... И это невозможно сделать с помощью областей, тогда как конфигурации Ivy предлагают элегантное решение этой проблемы.
Например, в Ivy, при условии, что hibernate имеет файл Ivy, подобный этому , тогда вы можете объявить зависимость следующим образом:
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->proxool,oscache"/>
, чтобы получить hibernate с его реализациями Proxool и Oscache, и вот так:
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->dbcp,swarmcache"/>
для перехода в спящий режим с использованием dbcp и swarmcache.
Сопоставляя конфигурацию по умолчанию master
с «proxool,oscache
» или «dbcp,swarmcache
», вы указываете, что вам нужно точно из модуля «hibernate».
Вы можете найти эти аргументы "proxool, ...", перечислив конфигурацию Ivy, определенную для каждого модуля, связанного с библиотекой. Например:
<ivy-module version="2.0">
<info organisation="ssn-src" module="pc"/>
<configurations defaultconfmapping="default->default">
<conf name="default" />
<conf name="provided" description="they are provided by the env." />
<conf name="compile" extends="default,provided" />
<conf name="war" extends="default"/>
</configurations>
<dependencies>
Пример :
предположим, что modA
имеет две конфигурации: стандартная и тестовая.
С практической точки зрения весьма необычно хотеть опустить атрибут conf
элемента зависимости.
ivy.xml
для modA
может иметь зависимость:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*" />
Вы начинаете со стандартного, а не стандартного и тестового.
В приведенном выше примере зависимость modA по умолчанию зависит от conf1, conf2 и conf3 modB.
Или вы можете сказать, что значение modA по умолчанию зависит только от conf1 modB:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*conf1*" />