mvn pde:pde で SDK3.2系を headless build

実は先々週から悩んでいた件.mvn pde:pde は,便利. OSX + XCodeJavaMavenが簡単にセットアップできる.この組み合わせってばサイコーと思っていたのが大ハマりの始まり.
難しいっていうより,マトモに集中できる環境に無くて問題点を整理できなかったっていう感じなのだけれども.

java.lang.Objectが見つからない.

これは,ビルド済みのプラグインやフィーチャーを用いてオレオレディストロを作る場合は顕在化しない*1

原因は,判ってしまえば簡単.でも結構悩んだ.

まず,PDE側の問題.

PDEが自動生成するbuild.xmlは下記に挙げる通り.bootclasspathには,通常 rt.jar が指定されるが,fileset で指定したディレクトリには rt.jar が無い.これが問題の第1点.

        <path id="path_bootclasspath">
                <fileset dir="${java.home}/lib">
                        <include name="*.jar"/>
                </fileset>
        </path>
rt.jar を探してみる.が,どこにもない.

OSXJava環境では,rt.jar に含まれるようなクラスも classes.jar に含まれている*2

ここまで判ると付け焼き刃の対策は簡単.

下記のようにして解決.

# cd /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/
# ln -s ../../Classes/classes.jar rt.jar
制約事項

この解法が付け焼き刃に留まるのは,この解法には管理者権限が必要なため.Sourceforge.jpコンパイラファームなどでは/System配下には(当然)手が出せないので,困る.
OpenJDK7辺りからSoyLatteの成果が取り入れられていてバイナリも入手可能.上手いことやればOpenJDKのJRE*3で環境を構築できるのかもしれない.でも私には具体的な解決策を見いだすことができなかった.

*1:ビルドしないのだから当たり前

*2:ものすごく昔の Java処理系は,classes.jar に何でも入っていたような曖昧が記憶がある.それを踏襲しているのだろうか

*3:OpenJDKは,Darwin版でも,一般的なJDKと同じ素直なディレクトリ構成になっている.rt.jarも${java.home}/lib/にある.