Может кто-нибудь объяснить атрибут conf зависимости ivy.xml? - PullRequest
65 голосов
/ 17 марта 2009

Не могу найти подробного объяснения атрибута conf тега зависимости Ivy:

<dependency org="hibernate" name="hibernate" rev="3.1.3" conf="runtime, standalone -> runtime(*)"/>

Видите этот атрибут conf ? Я не могу найти никакого объяснения (которое я могу понять) относительно правой части символа ->. ПОЖАЛУЙСТА, имейте в виду, что я ничего не знаю о Maven, поэтому, пожалуйста, объясните этот атрибут с учетом этого.

Да, я уже смотрел на это: http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

Спасибо
Dan

Ответы [ 4 ]

74 голосов
/ 17 марта 2009

Прежде всего, Плющ не 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*" />
15 голосов
/ 18 февраля 2014

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

http://wrongnotes.blogspot.com/2014/02/simplest-explanation-of-ivy.html

К сожалению, вам нужно немного понять о maven и его зависимостях, потому что Ivy использует репозитории Maven для загрузки этих jar-файлов, поэтому Ivy должна понимать Maven, и он передает вам это. Но я думаю, что все было очень просто, не вдаваясь в подробности о maven.

13 голосов
/ 01 августа 2009

Спасибо VonC!

Это помогло мне еще больше.

Когда дело доходит до опций (конфигураций) tieTYT, их можно найти в файле ivy- [номер редакции] .xml в вашем хранилище Ivy в разделе: название организации -> имя модуля.

Пример элемента конфигурации из ревизии JUnit 4.6, загруженного из http://www.springsource.com/repository/app/.

<configurations>
    <conf name="compile" visibility="public" description="Compile dependencies"/>
    <conf name="optional" visibility="public" extends="compile" description="Optional dependencies"/>
    <conf name="provided" visibility="public" description="Provided dependencies"/>
    <conf name="runtime" visibility="public" extends="compile" description="Runtime dependencies"/>
</configurations>

В файле ivy.xml моего проекта есть тест компиляции конфигурации. В элементе зависимостей у меня есть следующая зависимость:

<dependency org="org.junit" name="com.springsource.org.junit"
        rev="4.6.0" conf="compile-test->compile" />

Как вы видите, моя конфигурация теста компиляции зависит от конфигурации компиляции в файле ivy.xml JUnit.

7 голосов
/ 04 мая 2010

Это помогло мне однажды понять вещи таким образом:

  1. Конфигурация плюща - это просто название некоторого подмножества артефактов модуля.
  2. Зависимости между модулями указаны в терминах имен конфигурации.
...