GroovyのGrapeを使うと実行時に依存関係を解決できます。 - Groovy - Grape -- http://groovy.codehaus.org/Grape - grails - Getting Groovy's Grape Going! - Stack Overflow -- http://stackoverflow.com/questions/192432/getting-groovys-grape-going - Japanese Grape - Groovy - Codehaus -- http://docs.codehaus.org/display/GROOVY/Japanese+Grape Grapeの内部にはIvyが使われていますので、 [[1099]] で実験したIvyの設定などがそのまま活用できます。 Mavenローカルリポジトリとの連携もIvyの話がそのまま適用され、codehausのGrapeのページにも"~/.groovy/grapeConfig.xml"にMavenローカルリポジトリ参照用のresolverの組み込み方が紹介されています。 ・・・が、2.0系では以下のchangesetで上記設定が組み込み済みになっています。 - GROOVY-4223: Add local maven repo to default Grape config · b3e6a9b · groovy/groovy-core -- https://github.com/groovy/groovy-core/commit/b3e6a9b3a3e1c2f69d747906233578e7f3af1db4 -- GROOVY-4223 : http://jira.codehaus.org/browse/GROOVY-4223 1.8.0の段階ではまだ組み込まれてなかったようです: - http://svn.codehaus.org/groovy/tags/GROOVY_1_8_0/src/main/groovy/grape/defaultGrapeConfig.xml しかし、1.8系の新し目であれば上記2.0系への変更がバックポートされています。 - merge changeset 22530 from trunk: GROOVY-4223: Add local maven repo to d... · 2aef8de · groovy/groovy-core -- https://github.com/groovy/groovy-core/commit/2aef8de776cb4f4368ca056ca91fd62a7552f3db 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 ... ... 上記のように、1.8系の最新 or 2.0系以降であればデフォルトでMavenのローカルリポジトリを参照してくれるようになっていました。 ということで実験ですが、今回は [[1099]] でローカルにinstallしたjarをGrapeで呼び出してみます。 foo.groovy: #pre||> @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ファイルが重複してしまいますが、利便性とのトレードオフで諦めるしか無いのか・・・(´・ω・`)