読者です 読者をやめる 読者になる 読者になる

EclipseのPlugin開発するためのMavenがないわけを考えてみた。

今から二年近く前。自分のプロジェクトとして初めてEclipse RCPを作ろうと思い立ったとき、当時は自分も便利そうだし、使った事のなかったMaven2を使ってプラグインの開発環境を作ろうと思いました。しかし、その当時もどーしてもやれませんでした。今に至ってもMaven2を使ってプラグインを開発しているという話は聞いたことがありません。この程一通り自動ビルド、テスト環境を作ってみて、なんでMaven2のプラグインにEclipseビルド用のプラグインがないか、語れそうな気がしてきたので、書いてみます。

Maven2を使う理由は主に、pom.xmlにライブラリ名を書くと、依存するライブラリを自動で引っ張ってきてくれるという機能ではないでしょうか。この仕組みの相性がそもそもよろしくないです。
Eclipseのプラグインに組み込むライブラリは、各プラグインの中に入れることもできますが、他のプラグインからも利用できるように別のプラグインとして切り出しておく事が多いです。現にEclipse IDEにはAntやluceneなどApacheプロジェクトの成果物がプラグインが組み込まれていますが、これらは特定のプラグインにライブラリとして導入されているわけではありません。そうしておくことにより、Eclipse IDEの開発者以外の開発者からも同じライブラリをプラグイン開発に利用できるように開放しています。Eclipseの各プロジェクトで利用するライブラリを管理するためのプロジェクトとしてOrbitがあります。
また、プラグイン同士の依存はマニフェストファイル(META-INF/MANIFEST.MF)に記述しますが、pom.xmlにも記述しないとならないとなると情報が重複します。pom.xmlに記述している情報とマニフェストファイルに記述している内容を管理する必要が出てきます。これだけで全然うれしくないですよね。
また、Maven2に用意されているゴールですが、ほぼすべてのものが既存の環境、つまりアプリケーションを構成するクラスローダーが一つの環境で動作するものばかりではないでしょうか。OSGiのように、プラグイン(Bundle)ごとにクラスローダーが用意されている環境で動作できるゴールを僕は知りません。(Maven Bundle PluginっていうOSGi環境を構築するためのMaven2プラグインがあるってことは知ってますが、使ったことありません。OSGi環境といってもFelixであって、Equinoxではないのでプラグイン開発環境に使えるかは、未知数です。)Testや、Packageなどのゴールを使えないのだとしたらMaven2を使う理由はどこなんでしょうか。
Eclipse ProjectにはEclipse Buckminster ProjectというEclipseプラットフォーム上で動作するアプリケーションを構築するためのプロジェクトがあります。このプロジェクトには10年以上びるだーの仕事を経験したまいすたーがたくさんいるわけですよ。ShellスクリプトやらAntスクリプトやらバッチなどが書けるメンバーだらけなわけなので、Maven2を使わないでも全然いけちゃうメンバーだらけな訳です。それにプラグイン開発者からしてみればEclipse上でほとんどすべての作業ができる(自動化除く)ので、Maven2みたいなコンソールを叩く作業が流行らなかったのかなと思います。
そんな感じなのでMaven2を使ったEclipse Plugin開発が行われないのかなと思いました。なお、依存するライブラリを自動で解決する件ですが、Equinox Provisioning(通称p2)というプロジェクトが現在走ってます。このプロジェクトでは特定のリポジトリにつないで、利用したいライブラリを選択すると、自動的にそれに付随するライブラリをダウンロードできる環境を目指して開発が進んでいるようなので、Maven2を使った場合よりも便利な環境が出きるんじゃないかと僕は期待してます。(今のところ中を追っかけてみたい気もしてますが、そこまで手を回せてません。)