Apache Ivy: разрешение зависимостей, встроенных в установщик - PullRequest
4 голосов
/ 26 мая 2009

У меня проблема со сборкой, когда я должен разрешать нестандартные артефакты с помощью Apache Ivy.

Проблема:

  • У меня есть зависимости от двух артефактов (a.jar и a-lib.jar).
  • Эти две зависимости входят только в состав одного установщика (a_installer.jar).
  • Установщик можно скачать, сами встроенные артефакты - нет.
  • Возможно манипулировать установщиком для распаковки необходимых зависимостей.

Требования:

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

Кто-нибудь решил подобную проблему или какую-нибудь полезную информацию для обмена?

Или, может быть, я неправильно подхожу к проблеме? Из того, что я нашел в Интернете, люди, кажется, используют Ivy просто для загрузки файлов и последующей обработки их вручную (с помощью Ant / что угодно) после факта, а не для разрешения более сложных зависимости в пределах плюща.

Спасибо

PS: Мне все равно, помещается ли установщик в кеш загрузки ivy, но я хотел бы загрузить установщик только один раз (и не для обеих зависимостей).

Ответы [ 2 ]

5 голосов
/ 27 января 2010

Проблема с вызовом «ivy: retrieve» заключается в том, что вам также необходимо добавить тег «артефакт» в ваш ivy.xml (в комплекте с URL), чтобы получить не найденную зависимость в репозитории Maven ...

Мне это не нравится по двум причинам

  1. ivy.xml должен просто объявить ваши зависимости, а не их расположение.
  2. Требуется дополнительная пользовательская логика в build.xml для обработки стороннего пакета

В идеале именно настройки вашего репозитория должны решать, как загружать различные jar-файлы, поэтому мне нравится распознаватель packager . Даже если нужной мне библиотеки нет в Maven, я могу настроить ivy для ее обработки.

Ниже приведен пример превращения проекта jreleaseinfo в зависимость ivy (размещена в sourceforge, я не смог найти его в Maven)

ivy.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="ivy_packager"/>
    <dependencies>
        <dependency org="ch.oscg" name="jreleaseinfo" rev="1.3.0"/>
    </dependencies>
</ivy-module>

Объявить два резольвера. По умолчанию Maven2, другой - упаковщик , настроенный для локального поиска инструкций. (См. Также проект Ivy Roundup)

ivysettings.xml

<ivysettings>
    <settings defaultResolver="maven2"/>
    <resolvers>
        <ibiblio name="maven2" m2compatible="true"/>

        <packager name="repackage" buildRoot="${user.home}/.ivy2/packager/build" resourceCache="${user.home}/.ivy2/packager/cache">
            <ivy pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/ivy.xml"/>
            <artifact pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/packager.xml"/>
        </packager>
    </resolvers>
    <modules>
        <module organisation="ch.oscg" name="jreleaseinfo" resolver="repackage"/>
    </modules>
</ivysettings>

Магия содержится в файле "упаковщик". Во время разрешения это будет использоваться для создания сценария ANT, который загружает и извлекает необходимые файлы jar. (Нет необходимости помещать эту логику в ваш build.xml )

хранилище / ch.oscg / jreleaseinfo / 1.3.0 / packager.xml

<packager-module version="1.0">

    <property name="name" value="${ivy.packager.module}"/>
    <property name="version" value="${ivy.packager.revision}"/>
    <property name="zipname" value="${name}-${version}"/>

    <resource dest="archive" url="http://sourceforge.net/projects/jreleaseinfo/files/jreleaseinfo/jreleaseinfo%201.3.0/jreleaseinfo-1.3.0.zip/download" sha1="9386d92758e627d04c2480b820731fd538b13a3f" type="zip"/>

    <build>

        <move file="archive/${zipname}/${zipname}.jar" tofile="artifacts/jars/${name}.jar"/>

    </build>
</packager-module>

Чтобы уменьшить количество файлов, я опустил ivy.xml модуля. Это кажется необязательным, если вы не хотите объявить его лицензию и другие атрибуты, которые должны присутствовать в общедоступном репозитории.

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

Я думаю, что это очень просто: 'ivy: retrieve' a_installer, а затем разархивируйте a.j и a-lib в каталог lib (или там, где вы хотите). Это должно быть легко сделать с муравьем?

Мне интересно, есть ли какие-то осложнения, о которых вы не упомянули, которые мешают вам сделать это.

...