MacPorts で Groovy1.8.0 をインストール

MacPorts による Groovy のインストールに手こずったので、その顛末を残します。

環境(2011年7月30日追記)

MacOSX 10.6 Snow Leopard
MacPorts 1.9.2

動機

「プログラミング Groovy」を購入したので、写経しようと思い立ちました。

なぜ MacPorts

ある程度の管理が自動化できるので、面倒くさがりな自分にはこの方がいいという判断でした。環境変数なんかも設定してくれますし。

インストール(失敗)

port コマンドで、通常通りインストールを実行します。

$ sudo port install groovy
--->  Fetching groovy
--->  Verifying checksum(s) for groovy
--->  Extracting groovy
--->  Configuring groovy
--->  Building groovy
Error: Target org.macports.build returned: shell command failed (see log for details)
Log for groovy is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_java_groovy/main.log
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>

ログ*1を読むと、どうやらリポジトリで jarjar.jar の 1.0 が見つからないみたいです。
Maven Repository で探してみると、1.1 ならあるらしいです。下位互換性はあるものと信じます。
さて、どこに設定を書けば良いのだろうと思ったのですが、ログ中の以下の記述から、groovy-tools.pom と予想。

:info:build   Path to dependency:
:info:build        1) groovy:groovy-tools:jar:internal
:info:build        2) com.google.code:jarjar:jar:1.0

groovy-tools.pom*2 を以下のように書き換えます(一部抜粋)。

        <dependency>
            <groupId>com.googlecode.jarjar</groupId>
            <artifactId>jarjar</artifactId>
            <version>1.1</version>
        </dependency>
<!--
        <dependency>
            <groupId>com.google.code</groupId>
            <artifactId>jarjar</artifactId>
            <version>1.0</version>
        </dependency>
-->

インストール(また失敗)

先程と同様に、以下のコマンドでインストールします*3

$ sudo port install groovy

jarjar.jar は上手く行ったようですが、今度は osgi.jar の 3.4.3.R34x_v20081215-1030 がないみたいです。
main.log(一部抜粋)

:info:build [artifact:dependencies]   Path to dependency:
:info:build [artifact:dependencies]        1) groovy:groovy-examples:jar:internal
:info:build [artifact:dependencies]        2) org.eclipse:osgi:jar:3.4.3.R34x_v20081215-1030

また探すと、3.7.0.v20110613 がありました。groupId とか artifactId とか違うけど、大丈夫だと信じることにします。
groovy-examples.pom*4 を以下のように修正します(一部抜粋)。

        <dependency>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>org.eclipse.osgi</artifactId>
            <version>3.7.0.v20110613</version>
        </dependency>
<!--
        <dependency>
            <groupId>org.eclipse</groupId>
            <artifactId>osgi</artifactId>
            <version>3.4.3.R34x_v20081215-1030</version>
            <scope>compile</scope>
        </dependency>
-->

インストール(成功)

上手く行ったようです。

$ sudo port install groovy
--->  Building groovy
--->  Staging groovy into destroot
--->  Installing groovy @1.8.0_1
--->  Activating groovy @1.8.0_1
--->  Cleaning groovy

このあと、groovysh コマンドなどを実行してみましたが、動作している模様です。

$ groovysh
Groovy Shell (1.8.0, JVM: 1.6.0_26)
Type 'help' or '\h' for help.
---------------------------------------------------------------------------------------------------
groovy:000> println "Hello, World!"
Hello, World!
===> null
groovy:000> 

まとめ

今回は、何となく予想により変更して上手く行きました*5が、MacPortsMaven をちゃんと理解していないことを痛感しました。
現場で開発をしている訳ではないですが、当たり前に使われるツールや手法は確認しておきたいと思いました。
現場との乖離は、仕事的にも致命的ですし。

*1:/opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_java_groovy/main.log

*2:/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_java_groovy/work/groovy-1.8.0/config/maven/groovy-tools.pom

*3:port コマンドでのインストールは、clean しなければ 2 回目以降はサーバからの fetch が行われないため、上で修正した設定ファイルが利用されます

*4:/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_java_groovy/work/groovy-1.8.0/config/maven/groovy-examples.pom

*5:実際は一度放棄しているので、解決までに数日掛かってます