Проблема с вызовом «ivy: retrieve» заключается в том, что вам также необходимо добавить тег «артефакт» в ваш ivy.xml (в комплекте с URL), чтобы получить не найденную зависимость в репозитории Maven ...
Мне это не нравится по двум причинам
- ivy.xml должен просто объявить ваши зависимости, а не их расположение.
- Требуется дополнительная пользовательская логика в 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 модуля. Это кажется необязательным, если вы не хотите объявить его лицензию и другие атрибуты, которые должны присутствовать в общедоступном репозитории.