2009-03-16 9 views
60

я не могу найти подробное объяснение конф атрибут тега Ivy DEPENDENCY в:Может ли кто-нибудь объяснить атрибут confia ivy.xml?

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

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

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

Спасибо,
Dan

+0

Добавлено несколько деталей, по запросу – VonC

ответ

69

Прежде всего, Ivy is not Maven;)
Maven2 является инструментом управления программным проектом и понимание, в то время как Айви только инструмент управления зависимостями.

Айви тяжело полагается на уникальную концепцию конфигурация.
В плющовой конфигурации модуля используется способ или для просмотра модуля.
Например, вы можете иметь конфигурацию тестирования и времени выполнения в вашем модуле. Но вы также можете иметь конфигурацию mysql и oracle. Или спящий режим и конфигурация jdbc.

В каждой конфигурации вы можете объявить:

  • , что артефакты (баночка, война, ...) обязательны для заполнения.
  • ваши зависимости от других модулей и укажите, какая конфигурация зависит от вас. Это называется конфигурационным отображением.

Таким образом, атрибут conf выполняет именно это: Описывает сопоставление конфигурации для зависимости.
mapped child element - это ваша «правая сторона символа ->» и представляет собой имя отображаемой конфигурации зависимостей. '*' wildcard можно использовать для обозначения всех конфигураций этого модуля.


Maven2 на его стороне есть что-то назвал сферу.
Вы можете объявить зависимость как часть области проверки или область времени сборки.
Тогда в зависимости от этой области вы получите артефакт зависимости (только один артефакт для каждого модуля в maven2) с его зависимостями в зависимости от их объема. Области предопределены в maven2, и вы не можете это изменить.

Это означает, что:

Есть целый много ненужных зависимостей, загруженные для многих библиотек.
Например, Hibernate загружает кучу JBoss JAR, а Дисплей Tag загружает все различные JAR-интерфейсы в веб-среде. Я обнаружил, что исключаю почти столько же зависимостей, сколько добавил.

Проблема заключается в том, что спящий режим может использоваться с несколькими реализаций кэша, несколько реализаций пула соединений, ... И это не может управляться с областями, Wheres конфигурация Ivy предлагает элегантное решение проблемы такого рода.
Например, плющ, предполагая, спящий режим имеет файл плющ, как этот, то вы можете объявить зависимость так:

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

Example:

давайте предположим, что 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*" /> 
+5

Хорошо, я думаю, что почти понял. Но где вы находите свои варианты? Как вы узнали, что можете сказать proxool, oscache/dbcp, swarmcache? –

+1

«Загруженные ненужные зависимости» IS адресуется в Maven, исключая транзитивные зависимости по умолчанию и делая ваши варианты явными. Но я буду первым, кто признает, что это отнюдь не «изящно». – mezmo

+2

+1 для очень четкого ответа; см. также http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html –

13

Благодаря VonC!

Это помогло мне многое дальше.

Что касается опций (конфигураций) tieTYT, их можно найти в файле ivy- [revision number] .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 в.

+1

Полностью пропустил свой ответ. Хорошая иллюстрация. +1 – VonC

7

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

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

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

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

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

+0

очень полезная статья, возможно, было бы неплохо понравиться этой ссылке, которая объясняет области maven, которые вам нужно знать http://stackoverflow.com/questions/7104364/how-are-maven-scopes-mapped-to- плющ-конфигурация-By-плющ – pvgoddijn