Apache Ivy
Познакомитесь Apache Ivy очень интересный проект для программистов Java. В чем его интересность - он позволяет разработчику управлять зависимостями java библиотек при компиляции и развертывании java приложений т.е. автоматизировать сборку приложения в области закачки нужных вам java библиотек. Ivy тесно интегрирован с проектом Apache Ant - java-утилитой для автоматизации процесса сборки java приложений. В принципе как я понял из документации Ivy можно использовать и отдельно без ant, но куда интереснее в связке с Ant. При работе над проектом все недостаюшие вам ява библиотеки будут скачаны из репозитария. По умолчанию используется центральный Maven репозитарий, но если необходимо то можно использовать свой допустим Apache Archiva - http://archiva.apache.org, все гибко настраивается в Ivy. Давайте расмотрим все по порядку: установку,настройку, и работу примера. Для установки Apache Ivy вам нужно скачать с официального сайта последнию версию, распаковать архив, с копировать ivy*.jar (в моем случае ivy-2.2.0.jar) в lib директорию Apache Ant, т.е. у вас на компьютере ivy*.jar должна находиться в ANT_HOME/lib. Давайте перейдем к простому примеру который поставляется вместе с Ivy: src/example/hello-ivy, пример состоит из 3-х файлов - Hello.java простой файл при компиляции которому нужны 2 java библиотеки: commons-lang-2.0.jar и commons-cli-1.0.jar т.е. можно сказать что наше приложение зависит от 2 артифактов, которые мы каким-то образом должны получить. Все зависимости мы должны описать в файле конфигурации ivy.xml:
<ivy-module version="2.0"> - все настройки начинаются этим тегом и соотвественно заканчиваются, версия файла настройки 2.0 <info organisation="org.apache" module="hello-ivy"/> информационный тег существенной роли не играет, нужен для формирования имени файлов отчета в кеше - org.apache-hello-ivy-default.xml. <dependencies> - начало описания наших зависимотей <dependency org="commons-lang" name="commons-lang" rev="2.0"/> - 1-й артифакт который нам нужен <dependency org="commons-cli" name="commons-cli" rev="1.0"/> - и 2-й артифакт который нам нужен </dependencies>
Т.к. по умолчанию используется публичный репозиторий ibiblio http://repo2.maven.org/maven2 , будем разрешать зависимости используя его - найти нужную зависимость можно вручную:) Для этого, необходимо нам Maven POM Dependency(pom.xml если вы мигрируете с Maven'a) или maven-metadata.xml. Допустим мне нужна poi библиотека(артифакт) я захожу на репозитарий http://repo2.maven.org/maven2/poi/poi-2.5-final/ открываю maven-metadata.xml и переписываю зависимость
<dependency> <groupId>poi</groupId> <artifactId>poi-2.5-final</artifactId> <version>20040302</version> </dependency>
как <dependency org="groupId" name="artifactId" rev="version"/>:
<dependency org="poi" name="poi-2.5-final" rev="20040302"/>
Вот разобрались с нашими зависимостями, перейдем к файлу конфигурации ant - build.xml:
<project name="hello-ivy" default="run" xmlns:ivy="antlib:org.apache.ivy.ant"> 1-е нам нужно подключить Ivy - делается это следующим образом подключаем новое пространство имен xmlns:ivy="antlib:org.apache.ivy.ant" - и все что начинается с <ivy: ... /> будет относится к вызову команд ivy а не ant'a например: <ivy:retrieve/> - команда ivy. <!-- переменные нашего проекта --> <property name="lib.dir" value="lib" /> <property name="build.dir" value="build" /> <property name="src.dir" value="src" /> <!-- пути где лежат наши библиотеки(артифакты) они будут использоваться при компиляции и выполнении программы --> <path id="lib.path.id"> <fileset dir="${lib.dir}" /> </path> <path id="run.path.id"> <path refid="lib.path.id" /> <path location="${build.dir}" /> </path> <!-- ================================= target: resolve ================================= --> <target name="resolve" description="--> retreive dependencies with ivy"> <ivy:retrieve/> - с начала происходит загрузка наших зависимостей в локальный репозитарий, по умолчанию в ваш домашний каталог (user home), в директорию .ivy2/cache. Оттуда они загружается в нашу lib папку проекта. При следующей компиляции проекта сначало будет просмотрен наш кеш на наличие загруженных артифактов(java библиотек) и соответственно с репозитария Maven'a ни чего не загрузится что приведет к боллее быстрой компиляции и выполнению проекта. </target> <!-- ================================= target: run сдесь собирается и выполняется наш проект. ================================= --> <target name="run" depends="resolve" description="--> compile and run the project"> <mkdir dir="${build.dir}" /> <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="lib.path.id" /> <property name="msg" value="hello ivy !"/> <java classpathref="run.path.id" classname="example.Hello"> <arg value="-message"/> <arg value="${msg}"/> </java> </target> </project>
В качестве cache у Ivy используется один единственный .ivy2/сache по умолчанию и один единственный - публичный ibiblio resolver. Сдесь я ввел новое понятие - resolver место от куда мы загружаем наши артифакты, мы можем организовывать цепочку (chain) из resolver'ов: заглянем в проект chained-resolvers/settings/ivysettings.xml:
<ivysettings> <settings defaultResolver="chain-example"/> <resolvers> <chain name="chain-example"> - наша цепочка - объявление <filesystem name="libraries"> - сначало ищем артифакты в файловой системе <artifact pattern="${ivy.settings.dir}/repository/[artifact]-[revision].[ext]" /> </filesystem> <ibiblio name="ibiblio" m2compatible="true" /> - потом обрашаемся к Maven ibiblio </chain> </resolvers> </ivysettings>
Существуют различные resolver'ы способные загружать артифакты не только с web-серверов, но и ssh, ftp, smb, webdav и других, полный список смотрите в документации. Так вернемся к нашим баранам нам осталось только запустить наш проект на выполнение. Сразу предупрежу если вы выходите в интернет через proxy-server то вам нужно настроить соединение для Ivy установите переменную окружения:
ANT_OPTS=-Dhttp.proxyHost=myproxyhost -Dhttp.proxyPort=8080 -Dhttp.proxyUserName=myproxyusername -Dhttp.proxyPassword=myproxypassword -Dhttps.proxyHost=myproxyhost -Dhttps.proxyPort=8080
Кратко о главном - как использовать Ivy с Ant для этого нам надо:
- Описать артефакты, необходимые для сборки проекта (файл ivy.xml)
- Описать репозитории - цепочки (chain), из которых эти артефакты можно получить (файл ivysettings.xml)
- Описать в Ant - build.xml вызов задач Ivy.
Комментариев нет:
Отправить комментарий