home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2012/09/30/GrapeとローカルのMavenリポジトリの連携

日記/2012/09/30/GrapeとローカルのMavenリポジトリの連携

日記 / 2012 / 09 / 30 / GrapeとローカルのMavenリポジトリの連携
id: 1100 所有者: msakamoto-sf    作成日: 2012-09-30 19:53:02
カテゴリ: Groovy Ivy Maven 

GroovyのGrapeを使うと実行時に依存関係を解決できます。

Grapeの内部にはIvyが使われていますので、 日記/2012/09/30/Apache IvyとローカルのMavenリポジトリの連携 で実験したIvyの設定などがそのまま活用できます。
Mavenローカルリポジトリとの連携もIvyの話がそのまま適用され、codehausのGrapeのページにも"~/.groovy/grapeConfig.xml"にMavenローカルリポジトリ参照用の<ibiblio>resolverの組み込み方が紹介されています。

・・・が、2.0系では以下のchangesetで上記設定が組み込み済みになっています。

1.8.0の段階ではまだ組み込まれてなかったようです:

しかし、1.8系の新し目であれば上記2.0系への変更がバックポートされています。

groovy-1.8.8.jarから取り出して見ると、確かに"${user.home}/.m2/repository/"が組み込み済みでした。

$ jar xf groovy-1.8.8.jar groovy/grape/defaultGrapeConfig.xml
$ cat groovy/grape/defaultGrapeConfig.xml
...
<ibiblio name="localm2" root="file:${user.home}/.m2/repository/" \
    checkmodified="true" changingPattern=".*" changingMatcher="regexp" m2compatible="true"/>
...

上記のように、1.8系の最新 or 2.0系以降であればデフォルトでMavenのローカルリポジトリを参照してくれるようになっていました。

ということで実験ですが、今回は 日記/2012/09/30/Apache IvyとローカルのMavenリポジトリの連携 でローカルにinstallしたjarをGrapeで呼び出してみます。

foo.groovy:

@Grab(group='mvntest', module='mvnjartest', version='1.0-SNAPSHOT')
import mvnjartest.App

def a = new App('hello world')
println(a.capitalize())
$ groovy foo.groovy
Hello World

これにより、"~/.groovy/grapes/" 以下にcommons-langとmvnjartestのjarが展開されました。

~/.groovy/grapes/
    commons-lang/
        commons-lang/
            ivy-2.1.xml
            ivy-2.1.xml.original
            ivydata-2.1.properties
            jars/
                commons-lang-2.1.jar
    mvntest/
        mvnjartest/
            ivy-1.0-SNAPSHOT.xml
            ivy-1.0-SNAPSHOT.xml.original
            ivydata-1.0-SNAPSHOT.properties
            jars/
                mvnjartest-1.0-SNAPSHOT.jar

ということで特にオチはありません。
もしNexusなど会社とかチーム独自のローカルリポジトリサーバを運営している場合は、"~/.groovy/grapeConfig.xml"のカスタマイズで対処できると思われます。

最初は".m2/repository"を共有できないかな~と思ったんですが、Grapeは内部的にはIvyを使ってるので難しいかもしれません。Grapeには"grape"コマンドが付属してまして、

grape list
grape install
grape uninstall

などが使えます。また上記のようにディレクトリ構成もivyになってるので、MavenのローカルリポジトリをそのままGrape(=Ivy)のキャッシュとして使いまわす、というのは難しいようです。

Mavenの場合はリポジトリとキャッシュが同じ".m2/repository/"を共有する方式ですが、IvyやGrapeはリポジトリとキャッシュを区別して、ローカルに保存するのはキャッシュ、という具合に割り切っているようです。
jarファイルが重複してしまいますが、利便性とのトレードオフで諦めるしか無いのか・・・(´・ω・`)


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2012-09-30 19:53:25
md5:d5c1511eb63b3592aea8de4fc6619bdf
sha1:a8a745c11bf027f553f16fa21006df75ba2cc93c
コメント
コメントを投稿するにはログインして下さい。