Locked History Actions

ivy/IvyDE

IvyDEの使い方

ここでは、Eclipse用のプラグインIvyDEを使って、できるだけ簡単に依存関係の定義・解決と、Antのビルドファイルからそれを使う方法をさぐってみる。

IvyDEはEclipse用のプラグインである。2010/9現在のバージョンは2.1.0。Eclipseは3.6を利用している。

マニュアルの翻訳

IvyDEのインストール

アップデートサイトから簡単にインストールできる。

単純に新規リモートサイトとして

とすれば後はEclipseがよきにはからってくれる。

※2011/9/29現在は、eclipse-indigo(3.7)の場合、Eclipse Marketplaceにてivydeを検索すればよい。

Antのクラスパスの設定

IvyDEをEclipseにインストールすると、IvyDEプラグインと共に、自動的にivy本体のjarファイルもEclipseのpluginsフォルダに格納される。

とりあえずは不要だが、最終的にはAntを使いたいので、AntからIvyのタスクを呼び出せるようにしなければならない。そのためには、このIvy本体のjarファイルをAntのクラスパスに登録しておく。

これをやっておかないと、Antを実行したときに、

ビルド・ファイル: C:......build.xml

resolve:

ビルドに失敗しました。
C:.....build.xml:7: Problem: failed to create task or type antlib:org.apache.ivy.ant:retrieve
Cause: The name is undefined.

というエラーが発生する。

「ウインドウ>設定」メニューを選択し、クラスパスタブのAntホーム項目を選択。外部jarファイルの追加をクリックし、Eclipseのpluginsフォルダ直下の org.apache.ivy_*.jarを選択すればよい。

ivy.xmlの作成と編集

ivy.xmlに依存ライブラリを記述して、それをEclipseプロジェクトのビルドパスに含める。 こうすることにより、そのプロジェクト内のJavaソースから依存ライブラリを利用することができる。

  • ごく普通にEclipseにてJavaプロジェクトを作成する。
  • そのプロジェクトを選択し「ファイル>新規作成>その他」をメニューを選択。IvyDEからIvy fileを選択する。「次へ」を押して必要事項を記入。Containerにはこのプロジェクトを指定、Organization, Moduleはivy.xmlに指定したいものを入力。

  • ivy.xmlが作成される。
  • ivy.xmlにdependencyを記述する。例えば以下のようになる。

<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="cryptomedia" module="ivyTest" status="integration"></info>
  <dependencies>
    <dependency org="org.apache.wicket" name="wicket" rev="1.4.4"/>
  </dependencies>
</ivy-module>
  • ivy.xmlを右クリックして、Add Ivy Libraryを選択し、表示されたダイアログで「終了」を選択。
  • すると、プロジェクトにivy.xmlとは別に「ivy.xml[*]」というノードが現れる。それを展開してみると依存ライブラリが表示される。
  • Eclipseのビルドパスにそれらのライブラリが追加されているので、Javaソースを作成して、そのライブラリを呼び出すようなコードを書くことができる。

依存ライブラリを追加あるいは削除したい場合は、単純にivy.xmlを編集すれば保存した途端に、追加あるいは削除されたdependencyが解消される。 同時にビルドパス上のライブラリから不要なものが消え、必要なものが追加される。

Maven2のPOMファイルの利用

上記では、ivy.xmlに依存関係を記述してそれを解消する場合だが、ivyではMavenのpom.xmlを依存関係の定義として扱うことができる。 IvyDEでは依存ライブラリの検索機能がないため、人手でライブラリの検索を行い人手でそれをivy.xmlに記述しなければならないが、 Maven用のプラグインm2eclipseを使うと、この作業が非常に楽になる。

以下はm2eclipseプラグインがインストール済みであるものとする。

注意:2011/9/28現在、m2eclipseはm2eというプロジェクトに変更になった模様。 しかし、eclipse marketplaceに現れるものの、インストールできないし、本家ウェブサイトでもリンク切れになっている。 m2eclipseは以前からこのようなトラブルが多い。このような状態では安心して使用できない。

  • Javaプロジェクトを作成する。特にMavenプロジェクトとする必要はない。逆に既存のMavenプロジェクトにおけるpom.xmlを使いたい場合は、Javaプロジェクトに変更する必要はない。
  • プロジェクトを右クリックして「新規作成>その他」メニューを選択。Maven/Maven POM fileを選択して、次へで終了まで。
  • POMファイルにdependencyを追加してみる。pom.xmlを右クリックして「Maven>Add Dependency」を選択し、所望のライブラリを検索する。この時点ではEclipseのビルドパスに依存ライブラリは追加されない。

  • プロジェクトを右クリックし、新規>ファイル作成でivysettings.xmlという名前のファイルを作成し、以下のように記述。

<ivysettings>
  <conf defaultResolver="ibiblio"/>
  <resolvers>
    <ibiblio name="ibiblio" />
  </resolvers>
</ivysettings>
  • pom.xmlを右クリックし、Add Ivy Libraryを選択。
  • Mainタブでenable project specific settingsにチェックし、ivy settings pathに「project:///ivysettings.xml」と入力
  • configurationsの中のcompileとruntimeのみをチェック状態にする。
  • pom.xml[compile, runtime]というノードが現れ、そこに依存ライブラリが現れる。

pom.xmlに依存ライブラリを追加・削除などした場合には、pom.xml[compile, runtime]を右クリックし、メニューからResolveを選択することでpom.xmlの変更内容が反映される。

※上記のibiblioタグは以下のようにしないと依存ライブラリを正しくとってこれない場合がある。詳細は不明。 http://ant.apache.org/ivy/history/2.0.0-beta1/resolver/ibiblio.html を参照のこと。

<ibiblio name="ibiblio" m2compatible="true"/>

2.1.0での変更

上はIvyDE 2.0.0の場合。2.1.0では若干変更されている。以下のように行う。

  • pom.xmlを右クリックし、「Add Ivy library」を選択
  • 「設定」タブをクリックし、「プロジェクト固有の設定を可能にする」をチェック
  • 「Ivy settings path」を指定するのだが、「ワークスペース」をクリック、プロジェクト内のivysettings.xmlを選択する。
  • ${workspace_loc:プロジェクト名/ivysettings.xml}などという表示になる。
  • プロパティファイル「ivysettings-file.properties」を消去(もし作成していなければ)。
  • 「メイン」タブをクリックする。
  • 構成の中にdefault, master, compile, ...等があるので、compie, runtimeのみチェックして完了する。

もし、中途半端な状態で「完了」してしまった場合は、プロジェクトのビルドパス内の「ライブラリ」タブから「pom.xml」を除去しておく。 こうしないと再設定ができない。

pom.xml[compile, runtime]が現れない場合

たまにこういうことがある。原因は不明。この場合はプロジェクトプロパティのビルドパスの「ライブラリー」タブにて、いったん 「pom.xml[compile, runtime]」除去し、再度、「pom.xmlを右クリックし、Add Ivy Libraryを選択」から行って見る。

複数のmaven2リポジトリをつかいたいとき

上で示した例は、セントラルリポジトリのみを使う場合のもの。 ほかにもローカルリポジトリ、社内リポジトリ等複数のリポジトリを使用したい。この場合は以下のように記述する。

<?xml version="1.0"?>
<ivysettings>
  <settings defaultResolver="chainedResolvers"/>
  <resolvers>
    <chain name="chainedResolvers">
      <ibiblio name="local" root="file:${user.home}/.m2/repository/" m2compatible="true"/>
      <ibiblio name="ibiblio" m2compatible="true"/>
      <ibiblio name="internal" m2compatible="true" root="http://sample.com/inhouse"/>
    </chain>
  </resolvers>
</ivysettings>

ローカルリポジトリ(name="local")は、maven2側の設定がデフォルトであれば決まり文句と言ってよい。

ivysettings.xmlにプロパティを利用する方法

社内サーバで運用するインハウスリポジトリ(社内リポジトリ)を作成することがあるが、このアドレスは一意でなく場合によって変更したい。例えば、社内からはそのプライベートアドレス、社外からはVPNを介したアドレスである。 以下のようにする。

<?xml version="1.0"?>
<ivysettings>
  <properties file="${user.home}/.ivy2/ivysettings-file.properties" />
  <settings defaultResolver="chainedResolvers"/>
  <resolvers>
    <chain name="chainedResolvers">
      <ibiblio name="local" root="file:${user.home}/.m2/repository/" m2compatible="true"/>
      <ibiblio name="ibiblio" m2compatible="true"/>      
      <ibiblio name="internal" m2compatible="true" root="${INHOUSE_REPOSITORY}"/>
    </chain>
  </resolvers>
</ivysettings>

Windowsの場合であれば「c:\Documents and settings\ユーザ名\.ivy2\ivysettings-file.properties」を作成し、 以下のように記述する。これはXMLではなく単純なJavaのプロパティファイルである。

INHOUSE_REPOSITORY = http://10.8.0.1:8001/maven2

Antを使う

Antを使うには、上記のivy.xml, pom.xmlのいずれの場合でも、そのままでは依存ライブラリをantビルドから扱うことはできない。 それらは、リポジトリの中にあるので、Antビルドファイルからは見えないからだ。 Antで扱うには、それらをいったんローカルなフォルダにコピーしてくる必要がある。これを行うのが、Ant用のタスクorg.apache.ivy.antである。

ivy.xmlの場合

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="resolve">
  <target name="resolve">
    <ivy:retrieve />
  </target>
</project>

pom.xmlの場合

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="resolve">
  <target name="resolve" description="--> retrieve dependencies with ivy">
    <ivy:configure />
      <ivy:resolve file="pom.xml" conf="compile" />
    <ivy:retrieve/>     
  </target>
</project>

いずれの場合にも、(この場合はデフォルトなので)プロジェクト直下にlibフォルダが勝手に追加され、その中に依存ライブラリがダウンロードされる。 依存ライブラリ定義を変更した場合にも、既にダウンロードされたものは削除されないので、あらかじめ削除しておく必要があるかもしれない。

Ivy Consoleの表示

IvyDEは、当然のことながら内部的にIvyを呼び出しており、その都度のIvyの出力をコンソールに出力することができる。 これは以下のようにする。

  • Eclipseの通常の「コンソール」を表示する。
  • 「コンソール」の右上の方にある「コンソールを開く」ボタン(ウインドウに+印のアイコン)をクリックし、「Ivy Console」を選択する。