Использовать публичный репозиторий maven с плющом

У меня есть ivy.xml содержащий

<dependencies>
  <dependency org="commons-lang" name="commons-lang" rev="2.4"/>
  <dependency org="foo-bar" name="superwidgets" rev="1.5"/>
</dependencies>

Вся информация о супервидитах размещается в хранилище maven в http://example.com/m2/. Документация ivy упоминает преобразователи, но, похоже, она использует репозиторий плюща. Как я могу добавить один неофициальный репозиторий maven к моим настройкам плюща, которые будут использоваться только одним модулем? (Или по-другому, что соответствует тегу maven <repository> в плющом?) Ничего необычного, поэтому я ожидал бы однострочный слой в моем ivy.xml.

Ответ 1

Вам нужно добавить файл ivysettings.xml с перечисленными ниже репозиториями (resolvers в плющом )

<ivysettings>
    <settings defaultResolver="chain"/>
    <resolvers>
        <chain name="chain">
            <ibiblio name="central" m2compatible="true"/>
            <ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
        </chain>
    </resolvers>
</ivysettings>

По-моему, имеет смысл отделять декларацию зависимости (ivy.xml) от механизма извлечения (settings.xml). Это не нужно в Maven, потому что оно поддерживает только один тип репозитория.

Если вы хотите по-настоящему представить себе, что вы можете контролировать, какой репозиторий обслуживает определенный модуль:

<ivysettings>
    <settings defaultResolver="central"/>
    <resolvers>
        <ibiblio name="central" m2compatible="true"/>
        <ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
    </resolvers>
    <modules>
        <module organisation="foo-bar" name="superwidgets" resolver="example"/>
    </modules>
</ivysettings>

Ответ 2

Я предпочитаю цепные резольверы, которые включают SpringSource EBR и Maven Central, например:

<ivysettings>
    <settings defaultResolver="spring-chain" />
    <resolvers>
        <chain name="spring-chain">
            <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"/>
        </chain>
    </resolvers>
</ivysettings>

Хотя я не использую их напрямую, я предпочитаю создавать и управлять моим собственным локальным репозиторием Ivy.