Ответ 1
Прежде всего, Айви не Maven;)
Maven2 - это инструмент управления проектами и программного обеспечения, тогда как Ivy - это только инструмент управления зависимостями.
Айви сильно полагается на уникальную концепцию .
В плющом конфигурация модуля - это способ использования или для просмотра модуля.
Например, вы можете иметь конфигурацию тестирования и времени выполнения в вашем модуле. Но вы также можете иметь конфигурацию mysql и oracle. Или спящий режим и конфигурация jdbc.
В каждой конфигурации вы можете объявить:
- какие артефакты (jar, war,...) требуются.
- ваши зависимости от других модулей и укажите, какая конфигурация зависит от вас. Это называется конфигурационным отображением.
Таким образом, атрибут conf делает именно это: Описывает сопоставление конфигурации для зависимости.
отображаемый дочерний элемент - это ваша "правая сторона символа ->
" и представляет собой имя отображаемой конфигурации зависимостей. Подстановочный знак '*'
может использоваться для обозначения всех конфигураций этого модуля.
Maven2 со своей стороны имеет что-то, называемое область.
Вы можете объявить зависимость как часть области проверки или область времени сборки.
Затем в зависимости от этой области вы получите артефакт зависимости (только один артефакт для каждого модуля в maven2) с его зависимостями в зависимости от их объема. Области предопределены в maven2, и вы не можете изменить это.
Это означает:
Для многих библиотек загружено множество ненужных зависимостей.
Например, Hibernate загружает кучу JBoss JAR, а Дисплей Tag загружает все различные JAR-серверы в веб-среде. Я обнаружил, что исключаю почти столько же зависимостей, сколько добавил.
Проблема в том, что спящий режим может использоваться с несколькими реализациями кеша, несколькими реализациями пула соединений... И это не может быть реализовано с помощью областей, где конфигурации Ivy предлагают элегантное решение этой проблемы.
Например, в плюсе , предполагая, что hibernate имеет файл плюща, подобный этому, тогда вы можете объявить такую зависимость:
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->proxool,oscache"/>
чтобы получить спящий режим с его реализациями 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-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 default зависимым от modB conf1, conf2 и conf3.
Или вы можете сказать, что modA-значение по умолчанию зависит только от modB conf1:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*conf1*" />