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?)のスケルトンもウィザードが作ってくれます。
ヘルプに リッチ・クライアント・プラットフォーム・アプリケーションのビルド という項目があったので、見てみるとサンプルがEclipseのCVS
:pserver:anonymous@dev.eclipse.org:/home/eclipse
からダウンロード可能とのこと。
// ワークベンチの取得 IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); //アクティブなエディタの取得 IEditorPart editor = window.getActivePage().getActiveEditor(); AbstractTextEditor aEditor = (AbstractTextEditor) editor;
IDocument document = aEditor.getDocumentProvider().getDocument(editor.getEditorInput());
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すればよいでしょうか。
Eclipse3.0から上のやり方は deprecated になりました。2.0で
String pluginDirectory = Platform .resolve(getDefault().getDescriptor().getInstallURL()).getPath();
だったのを3.0では
URL entry = getDefault().getBundle().getEntry("/"); String pluginDirectory = Platform.resolve(entry).getPath();
と書き換えます。
http://www3.vis.ne.jp/~asaki/p_diary/diary.cgi?Date=2004-09-05
プラグインディレクトリにlibディレクトリなどを作成しておいて、plugin.xmlで
<runtime> <library name="hoge.jar"/> <library name="lib/fuga.jar"/> <-外部ライブラリ </runtime>
とすればOKです。
いわゆるEclipseのプロジェクトへの参照を取得する方法です。
IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); IProject project = myWorkspaceRoot.getProject([プロジェクト名の文字列]);
<extension point="org.eclipse.ui.popupMenus"> <objectContribution objectClass="org.eclipse.core.resources.IResource" <- ファイルとか、フォルダだったら表示 objectClass="org.eclipse.jdt.core.ICompilationUnit" <- いわゆるソースファイルだったら objectClass="org.eclipse.core.resources.IFile" <- ファイルだったら表示 objectClass="org.eclipse.core.resources.IFolder" <- フォルダだったら表示 id="nu.mine.kino.IResource"> <action label="スクリプト生成(&R)" class="nu.mine.kino.HogeAction" menubarPath="additions" <- すでにあるメニューに追加 enablesFor="1" <- 選択したファイルが1つだけの時有効 id="nu.mine.kino.HogeAction"> </action> </objectContribution> </extension>
IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); Shell shell = window.getShell(); MessageDialog.openInformation(shell, "タイトル","メッセージ");
が定番でしょう。windowオブジェクトはメソッドを記述するクラスによってはフィールドから得られたりしますが。。
IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); IViewReference[] references = page.getViewReferences(); for (int i = 0; i < references.length; i++) { IViewPart view = references[i].getView(false); <- Viewへの参照が取得できました MessageDialog.openInformation(window.getShell(), "ViewのtoString()", view.toString()); }
IWorkbenchPage workbenchPage = editor.getSite().getPage(); try { HogeView view = (HogeView) workbenchPage.showView("HogeViewのID"); } catch (PartInitException e) { }
Eclipse3.0から(だと思う)同じウィンドウを複数開くことができるようです。
IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchPage workbenchPage = workbench .getActiveWorkbenchWindow().getActivePage(); try { HogeView view = (HogeView) workbenchPage .showView("HogeViewのID", "HogeViewの別のID(Uniqueならよい?)", IWorkbenchPage.VIEW_ACTIVATE); } catch (PartInitException e) { }
http://d.hatena.ne.jp/muimy/20040804 から情報をいただきました。
トラブル(↓メモ書き状態)
パッケージ化するとインスタンスを生成できない。 私も同じトラブルに遭遇しました。
プラグインをパッケージングすると、何故かエラーになってしまうというもの。ビューを開こうとすると
インスタンスを生成できませんでした。
と言われてしまうんだけど、エラーを調べようにもどこにエラーが表示されているのかも分からないので困っていました。
そこでネットを探していたところ、同じような内容の投稿が。とりあえずこれを見て、プラグインのログは
というところまで分かりました。感謝!!
そのエラーログを見ると、xml関連のライブラリがないと。どうもプラグインをパッケージした場合と、ランタイムワークベンチで稼動しているVMのバージョンの違いが原因でした。*1 plugin.xmlに、
<library name="lib/xercesImpl.jar"/> <library name="lib/xml-apis.jar"/>
を追加して、ようやく動きました。疲れた...。。。
基本
難しい
この記事は
現在のアクセス:140187