: O. Yuanying

PluginRegistryで遊ぶ

概要

IPluginModelBaseを利用して、MANIFEST.MFファイルやplugin.xmlを弄る。

問題点

Eclipseでプラグインを開発するためのプラグイン、もしくはEclipseRCPを開発するためのプラグイン(Eclipse使ってるとメタな視点が多くなるのは気のせいか…)を開発しようとすると、どうしてもplugin.xmlやMANIFEST.MFファイルを弄って、Javaのコード上から拡張の宣言やプラグインの依存関係を追加する必要が出てくる。

Eclipse SDK3.2以前のバージョンにおいて、plugin.xmlやMANIFEST.MFを弄ろうとすると以下の方法しかなかった。

  • 自分でplugin.xmlのXMLをパースしたり、MANIFEST.MFをパーすする。
  • PDEのinternalなパッケージ内にあるIPluginModelBaseインタフェースの実装を利用する。

一番目の方法はplugin.xmlの構造が変わったりバージョンが変わったりするのにビクビクすることになるし、二番目の方法もまた未公開のAPIを利用することになるのでバージョンが変わるたびにそのAPIがいつなくなるのかビクビクすることになるのでよろしくない。

解決策

Eclipse3.3になってPDEにMANIFEST.MFやplugin.xmlを弄るためのクラスであるIPluginModelBaseを取得するためのクラスである、PluginRegistryが加わった。このクラスを使うと安全にプラグインを弄ることができる。


// pluginを弄るプロジェクトを取得する。
IProject project =...;
// プロジェクトからpluginモデルを取得する。
IPluginModelBase pluginModel = PluginRegistry.findModel(project);
IPluginBase plugin = pluginModel.getPluginBase();

// pluginに org.jalcedo.lingr というIDのプラグインを依存するプラグインとして追加する。
IPluginImport importNode = pluginModel.getPluginFactory().createImport();
importNode.setId("org.jalcedo.lingr");
plugin.add(importNode);