Плющ: как удалить транзитивные зависимости? - PullRequest
20 голосов
/ 28 января 2009

Я использую Ivy для управления зависимостями в моем проекте.

Пока что я указал зависимость от Hibernate и servlet-api. Однако сам hibernate jar имеет множество зависимостей, которые на самом деле не нужны, например, jaas и jacc .

Это становится пробкой, потому что jaas и jaac являются библиотеками Sun, и поэтому их лицензии запрещают размещать их в репозиториях Maven, поэтому Ivy не может их там найти.

  • Как заставить Айви загружать Hibernate, но не эти два?
  • В качестве бонуса, если бы я на самом деле нуждался в них и загружал их банки от Sun, в какой папке на моей машине их искала бы Айви?

Ответы [ 4 ]

25 голосов
/ 18 апреля 2009

Еще один вариант не загружать какие-либо зависимости - отключить их с атрибутом transitive. Так что, если вы хотите hibernate-core, но ни одна из его зависимостей, вы можете сделать это:

<dependencies>  
   <dependency org="org.hibernate" name="hibernate-core"
               rev="3.3.1.GA" conf='..'
               transitive="false" /> 
</dependencies>
19 голосов
/ 31 января 2009

Как заставить Айви загружать Hibernate, но не эти два?

Айви делает это с помощью так называемых «конфигураций». Ваш ivy.xml, представляющий Hibernate, должен будет предоставить различные конфигурации для представления различных вариантов использования для Hibernate. (Очевидно, что есть некоторое использование hibernate, которое требует jaas и jacc, но, очевидно, вы не используете этот случай.)

Здесь - документация по конфигурациям. Если вы хотите указать ivy.xml, который вы используете для спящего режима, я могу предоставить указатели на создание конфигураций, которые будут удалять определенные библиотеки, которые вы хотите удалить.

Если бы я действительно нуждался в них и загрузил их банки от Sun, в какой папке на моей машине их искала бы Айви?

«Каталоги», которые ivy просматривает для файлов и артефактов ivy, определяются списком преобразователей, которые вы используете. Список распознавателей указан в файле настроек ivy (обычно с именем ivysettings.xml.) Как правило, это не локальные каталоги, а удаленные URL-адреса. Есть; однако для этого будет работать тип распознавателя локальных файлов.

Если вы сделаете это, вам нужно будет предоставить как файлы плюща, так и артефакты (jars), каждый из которых должен иметь имена файлов, соответствующие шаблонам распознавателей. Подробности об этом в документации.

Вот пример распознавателя локальных файлов из файла настроек ivy:

<filesystem name="myfiles" checkconsistency="false" checksums="" transactional="false">
   <ivy pattern="/data/repo/[organisation]/[module]-[revision].ivy.xml"/>
   <artifact pattern="/data/repo/[organisation]/[module]-[revision].[ext]"/>
</filesystem>

Также обратите внимание, что вам нужно будет указывать в задачах ivy правильный распознаватель. Это можно сделать с помощью атрибута resolver в задачах ant или атрибута defaultResolver элемента settings в файле настроек ivy.

Здесь - документация по распознавателям.

РЕДАКТИРОВАТЬ: ОП нашел менее интенсивное решение для своей конкретной первоначальной проблемы. «Исключить» дочерний тег тега зависимости сделал работу за него:

<dependencies>  
   <dependency org="org.hibernate" name="hibernate-core" rev="3.3.1.GA" conf='..'> 
       <exclude name='jaas' /> 
       <exclude name='jacc' />
   </dependency>
</dependencies>
0 голосов
/ 08 февраля 2012

Чтобы ответить на ваш второй подвопрос буквально , который до сих пор никто не делал, "в какой папке на моей машине Айви будет искать JAR-файлы?" Это зависит от. Предполагая, что вы не изменили расположение в ivysettings.xml или другом файле конфигурации: для JAAS, это будет: ( дом пользователя ) /. ivy2 / cache / javax.security / jaas / jars. Если Айви уже безуспешно пытался найти JAAS в Maven Central или других репозиториях, это дерево каталогов уже должно существовать по большей части, и все, что вам нужно сделать, это создать каталог "jars" и поместить jaas-1.0.01 .jar в нем. Айви больше не будет жаловаться на отсутствующую зависимость при следующем вызове.

РЕДАКТИРОВАТЬ: Опять же, см. Обсуждение ниже, чтобы увидеть соображения, чтобы не делать это так.

(( дом пользователя ) - это C: / Users / ( имя пользователя ) в Windows 7).

0 голосов
/ 29 ноября 2009

Просматривая веб-страницы и блоги, я нашел следующие настройки ivy для работы с jaas / jacc и hibernate

<ivysettings>

<settings defaultResolver="chained" checkUpToDate="true" />

<resolvers>
    <chain name="chained">
        <url name="com.springsource.repository.bundles.release">
            <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
        </url>

        <url name="com.springsource.repository.bundles.external">
            <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
        </url>

        <ibiblio name="ibiblio" m2compatible="true"/>

        <ibiblio name="jboss" root="http://repository.jboss.org/maven2/" m2compatible="true"/>

        <ibiblio name="java-net-maven1" root="http://download.java.net/maven/1" pattern="${java.net.maven.pattern}" m2compatible="false"/>

        <ibiblio name="java-net-maven2" root="http://download.java.net/maven/2/" m2compatible="true"/>

        <ibiblio name="compass" m2compatible="true" root="http://repo.compass-project.org" />

    </chain>

</resolvers>

Резольвер jboss ibibilio - вот что помогло захватить JAAS / JAAC

Мой ivy.xml затем может вытащить его с помощью

<ivy-module version="2.0">

<info organisation="foo" module="Bar"/>
<dependencies>

    <dependency org="com.h2database" name="h2" rev="1.2+"/>

    <dependency org="org.hibernate" name="hibernate-annotations" rev="3.4.0.GA"/>     

</dependencies>

...