Я бы повторил ответ @ dbyrne о том, что ivy предназначен для управления двоичными предварительно скомпилированными зависимостями.Вам лучше всего иметь локального менеджера репозитория, такого как Nexus для хранения сторонних зависимостей вашего проекта.
Однако ....
Технически возможно, что ivy можетзагрузите и скомпилируйте зависимости, используя распознаватель пакетов .Этот очень умный распознаватель предназначен для того, чтобы брать сторонний zip или tar архив и затем использовать ANT для извлечения необходимого артефакта.
Ниже приведен мой пример, который загружает источник "hello world" из репозитория github leachim6 и на лету компилирует его в jar-файл "hello-world.jar".
Файлы
Файлы проекта
|-- build.xml
|-- ivysettings.xml
|-- ivy.xml
`-- repository
`-- leachim6
`-- hello-world
`-- 1.0
`-- packager.xml
ivy.xml
<ivy-module version="2.0">
<info organisation="com.demo" module="packager_demo"/>
<dependencies>
<dependency org="leachim6" name="hello-world" rev="1.0"/>
</dependencies>
</ivy-module>
Объявляет зависимость от версии 1.0 артефакта "hello-world".На этом уровне ожидается, что ivy получит банку из какого-либо стороннего хранилища.
ivysettings.xml
<ivysettings>
<settings defaultResolver="central"/>
<resolvers>
<ibiblio name="central" m2compatible="true"/>
<packager name="packager" buildRoot="${user.home}/.ivy2/packager/build" resourceCache="${user.home}/.ivy2/packager/cache" preserveBuildDirectories="false" restricted="false">
<ivy pattern="file:///${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/ivy.xml"/>
<artifact pattern="file:///${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/packager.xml"/>
</packager>
</resolvers>
<modules>
<module organisation="leachim6" name="hello-world" resolver="packager"/>
</modules>
</ivysettings>
Здесь мы определяем хранилища (или средства разрешения в ivy-говорить) будет использоваться.По умолчанию ivy извлекается из Maven Central, однако мы дополнительно указали, что вместо этого модуль «hello-world» должен извлекаться с использованием распознавателя упаковщика.
Атрибуты упаковщика требуют дополнительного пояснения:
- resourceCache : Здесь хранится загруженный архив.
- buildRoot : Здесь распаковывается и обрабатывается загруженный архив.
- ограничено : Обычно упаковщику не разрешается запускать команды ANT, такие как javac и delete.Считается опасным, если файл упаковщика был расположен в удаленном месте.
packager.xml
<packager-module version="1.0">
<property name="name" value="${ivy.packager.module}"/>
<property name="version" value="${ivy.packager.revision}"/>
<resource dest="archive" url="https://github.com/leachim6/hello-world/tarball/master" sha1="7f0e2836d1e8dc6130cca68d29b6f86027b22983" type="tar.gz"/>
<build>
<mkdir dir="classes"/>
<javac srcdir="archive/leachim6-hello-world-38f6567/j" includes="*.java" destdir="classes"/>
<jar destfile="artifacts/jars/${name}.jar" basedir="classes"/>
</build>
</packager-module>
Здесь мы размещаем логику сценария ANT, которая создает «привет мир».jar "Артефакт.
Этот файл используется для создания сценария ANT, который загружает удаленный артефакт (используя его контрольную сумму для безопасности) и извлекает или в нашем случае компилирует артефакт, который будет возвращен в задачу ivy..
Заключительные примечания:
- Это надуманный пример.В реальной жизни вы обнаружите, что логика компиляции обычно более сложна, чем простой вызов javac.
- Этот пример сломается, как только проект github выпустит другую версию.(Не было тегов выпуска, на которых можно было бы основывать этот образец)