JavaWorld?の2004年3月号に特集されていたので、Eclipseのプラグイン開発ツールを触ってみました。
Eclipseはこのプラグインの固まりで、すべての機能はプラグインで作成されているみたいです。ようするにEclipseを機能拡張したい場合はこのプラグインという作法に則って作成するわけですね。
まだ全然やり方がわかりません。とりあえずView(パースペクティブ内の一つのタイルのこと)を拡張して、選択しているファイルのファイル名を表示するプラグインを作成しています。
一番簡単なやり方は
後はすべてデフォルトでOKでよいです。ウィザードが完了すると、単純なプラグイン・プロジェクトの作成完了です。
基本的な構成はできたので、次はプラグインファイル(plugin.xml)の記述です。手順は
<extension point="org.eclipse.ui.views"> <category name="サンプルMyView" <- viewが属するカテゴリ名 id="com.samples.myview"> <- カテゴリのID </category> <view name="シンプルView" <- viewのバーのタイトル category="com.samples.myview" <- viewが属するカテゴリID class="com.samples.myview.SimpleView" <- viewを実装するクラス名 id="com.samples.myview.simpleview"> <- viewのID </view> </extension>で十分です。プロパティViewよりclassを選択すると対応するクラス(ここではcom.samples.myview.SimpleView?)のスケルトンもウィザードが作ってくれます。
メニューバーや、ツールバーにプラグインを表示させたいときは
org.eclipse.ui.actionSets
という拡張ポイントを使用します。 ウィザードでHello,Worldプラグインを選択すると、以下のようなplugin.xmlが出力されます。
<extension point="org.eclipse.ui.actionSets"> <actionSet label="サンプル・アクション・セット" visible="true" id="nu.mine.kino.example.actionSet"> <menu label="サンプル・メニュー(&M)" id="sampleMenu"> <separator name="sampleGroup"></separator> </menu> <action label="サンプル・アクション(&S)" icon="icons/sample.gif" class="nu.mine.kino.example.actions.SampleAction" tooltip="Hello, Eclipse world" menubarPath="sampleMenu/sampleGroup" toolbarPath="sampleGroup" id="nu.mine.kino.example.actions.SampleAction"> </action> </actionSet> </extension>
<menu label="サンプル・メニュー(&M)"
<action label="サンプル・アクション(&S)"
<actionSet label="サンプル・アクション・セット"
プラグインディレクトリにlibディレクトリなどを作成しておいて、plugin.xmlで
<runtime> <library name="hoge.jar"/> <library name="lib/fuga.jar"/> <-外部ライブラリ </runtime>
とすればOKです。
Log4jの初期化のためにlog4j.xmlを読み込むなど、プラグインディレクトリのパスを取得する場面は結構ありますが、その方法です。
String pluginDirectory = Platform .resolve(getDefault().getDescriptor().getInstallURL()).getPath();
で取得できます。 ちなみにLog4jの初期化などはAbstractUIPluginのサブクラス(勝手に作られるヤツ)で
public void startup() throws CoreException { super.startup(); String pluginDirectory = null; try { pluginDirectory = Platform .resolve(getDefault().getDescriptor().getInstallURL()) .getPath(); } catch (IOException e) { e.printStackTrace(); } DOMConfigurator.configure(new File(pluginDirectory, "lib/log4j.xml").toString()); }
などとstartup()をOverrideすればよいでしょうか。
プラグイン開発で、いろいろなUIにアクセスしたいわけですが、それぞれのUIがどのような関連になっているのかをまとめてみました。
ワークベンチ(ワークベンチ・ウィンドウ)とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。
IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();IWorkbench を取得するために AbstractUIPlugin#getWorkbench()てのもありますが
This method exists as a convenience for plugin implementors. The workbench can also be accessed by invoking PlatformUI.getWorkbench().なので同じなんですね。
ちなみに
IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
で IWorkbenchWindow? の配列が取得できますが、この配列はEclipseで ウィンドウ >> 新規ウィンドウ で開いているウィンドウ数です。
ワークベンチ・ウィンドウの内部には、パーツを含む 1 つのページがあります。ページは、パーツをグループ化するためのインプリメンテーション・メカニズムです。
どうも
WorkbenchWindow -> IWorkbenchPage -> IViewPart
となっているようだ。
System.out.println(window.getActivePage().getLabel());
// ワークベンチの取得 IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); //アクティブなエディタの取得 IEditorPart editor = window.getActivePage().getActiveEditor(); AbstractTextEditor aEditor = (AbstractTextEditor) editor;
//エディタ内のドキュメントを取得 IDocument document = aEditor.getDocumentProvider().getDocument(editor.getEditorInput()); document.addDocumentListener(this);
この記事は
現在のアクセス:0