Может кто-нибудь объяснить плющ.атрибут conf XML-зависимости?


Я не могу найти никакого подробного объяснения тега зависимости Плюща conf:

<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

спасибо,
Дэн

4 62

4 ответа:

прежде всего,Ivy-это не Мэйвен;)
Maven2-это инструмент управления и понимания программного обеспечения, в то время как Ivy-это только инструмент управления зависимостями.

Айви в значительной степени опирается на уникальную концепцию под названием конфигурация.
В Ivy конфигурация модуля-это способ использования или просмотра модуля.
Например, вы можете иметь тест и конфигурацию среды выполнения в вашем модуле. Но вы также можете иметь MySQL и конфигурация Oracle. Или спящий режим и конфигурация JDBC.

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

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

так conf атрибут делает именно это: описывает сопоставление конфигурации для a зависимость.
Элемент соотнесенные дочерний элемент это ваша " правая сторона -> символ " и представляет имя сопоставленной конфигурации зависимостей. '*' подстановочный знак может использоваться для обозначения всех конфигураций этого модуля.


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

это значит :

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

проблема в том, что hibernate может использоваться с несколькими реализациями кэша, несколькими реализациями пула соединений,... И это не может управляться с областями, где конфигурации Плюща предлагают элегантное решение такого рода проблемы.
Например, в Айви, предполагая, что 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>

пример:

давайте!--10--> имеет две конфигурации, по умолчанию и тест.
Как практический вопрос, это будет очень необычно, чтобы хотеть оставить conf атрибут элемента зависимости.
Элемент ivy.xml на modA может есть зависимость:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*" />

вы начинаете с default, а не с default и test.

в приведенном выше примере modA по умолчанию зависит от conf1, conf2 и conf3 modB.
Или вы можете сказать, что Moda по умолчанию зависит только от conf1 modB:

<dependency org="theteam" name="modB" rev="1.0" conf="default->*conf1*" />

Спасибо 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>

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

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

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

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

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

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

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

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