骨のダイスを転がそう
2015-05-06
_ [eclipse][maven] eclipse plugin のビルド方法について
Eclipseプラグインをmavenでビルドするには?
- 通常、tycho という maven プラグインを使用します。
- tycho を使用する場合、pom.xmlのdependenciesに依存jarを書いても無視されます。
- eclipseプラグインの依存関係はMETA-INF/MANIFEST.MF に記述されているため、その情報が使用されます。
- MANIFEST.MFに記述された依存jar は、mavenのリポジトリではなく、eclipseのp2リポジトリから取得されます。
- 依存jarがOSGi bundle形式で作成されていて、eclipse向けのp2リポジトリが用意されていれば良いのですが、実際にはそうなっていないケースも多々あります。
p2リポジトリが用意されていないか、そもそもOSGi bundle形式で作成されていない場合、どうするか?
tycho を使い続ける場合
- 依存jarを、プロジェクトの中に保存する。
- 手元に必要なファイルがあるため、ビルドは楽です。
- プロジェクトごとに依存jarを保存する必要があるため、同じファイルを何ヶ所かに配置する必要があります。
- 依存jarをアップデートしようとすると、それぞれのファイルを全て手でアップデートする必要があります。
- p2リポジトリを自前で用意する。
- p2リポジトリが無いjarやbundleのためにmavenのp2-maven-pluginを使用して独自のp2リポジトリを構築できます。
- OSGi bundle は、そのまま、そうでないjarはOSGi bundleの形に変換した上で独自のp2リポジトリを構築できます。そのままeclipseにプラグインとしてインストールできます。
- p2リポジトリの作成とプロジェクトのビルドという2段階を踏む必要があります。ただしp2リポジトリは一度作ってしまえば再利用できます。
- プラグインが色々なところから導入されても混乱が起きない、というのがeclipseの(というかOSGiの)売りですし、eclipse のプラグイン機構を使うという意味では正統派の解決方法です。
- 一方で「野良bundle」を作ることになるとも言えます。
- 現在稼動している他のプラグインに影響を与えないかがちょっと心配です。
- 複数人で開発する場合、p2リポジトリを共用できる場所に置いておく必要があります。
- sourceforge とか github とかに置いておけば良いので大した問題にはなりませんね。
tycho の使用を(部分的にでも)あきらめる場合
- いわゆる「POMファースト」と呼ばれる方法です。依存関係は全てpom.xmlに記述します。MANIFEST.MF は、あくまで生成物となります。
- サードパーティjarを集めたプラグインを作成し、プロジェクトをそのプラグインに依存させます。
- eclipse関連のランタイムに依存するプラグインをこれで作るのは大変な気がする。
- 全てのプロジェクトをPOMファーストにする必要はないですが、tychoのmavenビルドとPOMファーストのmavenビルドは同居できないためビルドを2段に分ける必要があります。