m2eclipse + IvyDE 利用メモ
※eclipse上でm2eclipse, IvyDEを利用する際のTIPSをまとめる。つまり、この場合ivyファイルとしてはivy.xmlではなく、pom.xmlを使用する。
キャッシュの状態
この環境ではマシン内に二つのキャッシュが使用される。一つはMaven2のローカルリポジトリ、もう一つはIvyのキャッシュである。
ユーザホーム/.m2
Maven2で使用される設定などが格納されており、この中のrepositoryフォルダがローカルリポジトリ。 m2eclipseもここを利用する。
ユーザホーム/.ivy2
Ivyが使用する設定などが格納されており、この中のcacheフォルダがキャッシュ。
基本的にeclipseプロジェクトが依存するアーティファクトが必要になったときに、IvyDE(Ivy)は上のキャッシュからアーティファクトを取得しようとする。存在しなければネット上のリポジトリを見に行き、取得結果を.ivy2/cacheに格納する。
もちろん、上述の動作は設定(ivysettings.xml)によるが、おそらく一般的には以下のように設定するものと思われる。
- .ivy2/cacheを見に行く。
- .m2/repositoryを見に行く。
- ネット上のリポジトリを見に行く。
ただし、.ivy2/cacheを見に行く、というのはデフォルトの動作なので指定する必要はない(そのためのキャッシュなのだから)。
maven2に先にキャッシュさせる
※以下は行わない方がよい。このモードにするとm2eclipseは通常のJavaプロジェクトのフォルダ構成を完全に無視してしまう。
ivyのキャッシュ動作は上のようなものであるので、pom.xmlを作成した時点dえmaven2に先にキャッシュさせておいた方がキャッシュ効率はよくなる。つまり、ivyはivy内で利用するキャッシュしか作成しないが、maven2のキャッシュはmaven2でもivyでも利用できるのである。
これを行うには、プロジェクトを右クリックして「maven2>Enable Dependency Management」を選択する。するとm2eclipseはpom.xmlに記述されている依存をただちに.m2/repositoryにダウンロードする。
また、このモードにすると、maven2がpom.xmlをチェックしてくれる。例えば以下をチェックできる。
- 同じアーティファクトを複数指定している。
- 同じアーティファクトの別バージョンを指定している。
※上を行わずにmaven2のローカルリポジトリにキャッシュさせる方法は今のところ不明
推移的依存を取得してこないケース
推移的依存をとってこないケースがある。すなわち、依存として指定したアーティファクトの依存するアーティファクトの、さらに依存するというように芋づる式にとってこなくてはいけないわけだが、こうならない。原因としては以下がある。
もちろん、推移的依存を取得したくない場合は、pom.xmlにexlusion指定を行えばよい。
source.jarやjavadoc.jarを取得してきてしまう
Maven2リポジトリ上にsources.jarやjavadoc.jarがあるとデフォルトではそれもとってきてしまう。 リポジトリのアクセスが遅い場合、何らかの事情でキャッシュを全削除した場合など、これをやらせたくない。 なお、この辺の事情(リポジトリから何を取得してくるのか)はivyのマニュアルには発見できない (ivyのマニュアルは、その量の割には必要な記述が多いに不足している)。
ivysettings.xmlに以下のように記述する。これはデフォルトのmaven2セントラルリポジトリから取得するための リゾルバの定義である。
<ibiblio name="ibiblio" m2compatible="true" pattern="[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
複数のリポジトリから取得するivysettings.xml
例えば以下のようにする。すべてのリポジトリはmaven2の形式なので、m2compatible="true"を指定する。 localはマシンのローカルリポジトリ、 inhouseは社内サーバのリポジトリ、 ibiblioはセントラルリポジトリ。
<?xml version="1.0" encoding="UTF-8"?> <ivysettings> <properties file="${user.home}/.ivy2/ivysettings-file.properties" /> <settings defaultResolver="defaultResolver"/> <resolvers> <ibiblio name="local" m2compatible="true" root="file:${user.home}/.m2/repository/"/> <ibiblio name="inhouse" m2compatible="true" root="${INHOUSE_REPOSITORY}"/> <ibiblio name="ibiblio" m2compatible="true" pattern="[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> <chain name="defaultResolver"> <resolver ref="local"/> <resolver ref="inhouse"/> <resolver ref="ibiblio"/> </chain> </resolvers> </ivysettings>
なお、ivysettings-file.propertiesは以下の一行のみである。
INHOUSE_REPOSITORY = http://10.8.0.1:8001/maven2