Может ли кто-нибудь объяснить атрибут confia зависимости ivy.xml?

Я не могу найти подробного объяснения атрибута 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

Ответ 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*" />

Ответ 2

Спасибо VonC!

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

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

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

<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" />

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

Ответ 3

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

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

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

Ответ 4

Это помогло мне разобраться в этом:

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