Apache Ivy によるライブラリの依存関係解決


一つ前の内容など、ライブラリの準備が大変なので、Apache Ivy でライブラリの取得を楽にする。
まずは簡単な例で Apache Ivy の使用例を示す。

EclipseではAntが組み込まれているため、ファイル作成してAnt実行すればライブラリを簡単に取得できる。

まずは、Eclipseで新規Javaプロジェクト作成し、プロジェクト直下にbuild.xmlファイルを作成する。

<?xml version="1.0" encoding="UTF-8"?>
<project name="ivy" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
    
  <property name="ivy.install.version" value="2.1.0-rc2" />

  <target name="download-ivy" unless="skip.download"  description="--> download ivy">
    <mkdir dir="lib"/>
    <echo message="installing ivy..."/>
    <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
        dest="lib/ivy-${ivy.install.version}.jar" usetimestamp="true"/>
  </target>

  <target name="install-ivy" depends="download-ivy" description="--> install ivy">
  	<path id="ivy.lib.path">
      <fileset dir="lib" includes="*.jar"/>
    </path>
    <taskdef resource="org/apache/ivy/ant/antlib.xml"
        uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
  </target>    

  <target name="resolve" depends="install-ivy" description="--> retrieve dependencies with ivy">
    <ivy:retrieve />
  </target>

</project>

こんな感じ。


続いて、同じ場所にivy.xmlを作成。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="./config/ivy/ivy-doc.xsl"?>
<ivy-module version="2.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
  <info organisation="apache" module="ivy"/>
  <dependencies>
    <dependency org="commons-lang" name="commons-lang" rev="2.4"/>
  </dependencies>
</ivy-module>

この例では、commons-langの2.4を指定。

build.xmlEclipse上で実行すると、ivyをダウンロード後、libディレクトリの中に該当のJarを取ってきてくれる。

ivy.xmlに指定するライブラリの検索は、http://mvnrepository.com/で探せる。POM Dependencyの記載サンプルが載ってるので、この内容を前述の dependency のフォーマットに合わせて書き変えればOK。

springを使いたい時は、

  <dependencies>
    <dependency org="org.springframework" name="spring" rev="2.5.6"/>
  </dependencies>

こんなふうにすると、依存関係のJarを落としてくる。
初回は時間がかかるが、次回以降は、ユーザディレクトリの.ivy2にキャッシュするので早くなる。が、エラーが・・