-バイナリバージョン

Eclipseプラグイン開発においてハマりどころはいくらでもあったのですが、2.xのころと違って、最近のバージョン(現行3.2で、3.3がリリース間近)では結構そのへん軽減されています。プラグイン間の依存関係や、マニフェストファイルでの記述などは最たるもので、以前は手動でメンテナンスしなければならないことも多く、しかも開発環境であるPDEのほうでもエラー検出がもう一息なところもありました。しかし、今は過去の典型例はほとんどつぶされています。OSGi対応にするために結構苦労したのも今は遠い思い出として風化させてしまったかも。
そんな中、週末は家族サービス全力投球なので金曜日の話なのですが、Eclipseプラグインを作っていてハマりました。エラーログを見ると、サービスとして該当するクラスがロードできなかった旨のエラーだったので、こりゃ連携のプラグインの可視性の問題か!と思いいろいろ試行錯誤するもダメ。その時点では過去の悪夢から基本的にPDEを信じてないのでエラーもマジメに見ていなかったのが敗因。実はバイナリのバージョンでアウトでした。私の環境ではデフォルトの出力バイナリバージョンの設定が「6.0」で、プロジェクトではデフォルト値を使うことになっていたのです。一方で環境の起動VMは5.0(表示はまだ1.5ですね)のそれでした。その旨しっかり例外としてメッセージに出てたのですが。。。環境5.0でバイナリが6.0だとこのバージョン間で起きたバイナリ仕様の変更から、VMはバージョンチェックだけして動かさない(エラーとしてしまう)わけですね。長時間ハマった後、ふと例外スタックを読んだらネストした例外で、そのネスト元を見るとしっかりと「バイナリのバージョンちがいまっせ」と書いてありました。