- 追加された行はこの色です。
- 削除された行はこの色です。
#topicpath
----
//ここにコンテンツを記述します。
***コンテンツ一覧 [#u25b59e3]
#ls2
----
#contents
**とりあえずやってみる [#k6a964ed]
JavaWorldの2004年3月号に特集されていたので、Eclipseのプラグイン開発ツールを触ってみました。
Eclipseはこのプラグインの固まりで、すべての機能はプラグインで作成されているみたいです。ようするにEclipseを機能拡張したい場合はこのプラグインという作法に則って作成するわけですね。
まだ全然やり方がわかりません。とりあえずView(パースペクティブ内の一つのタイルのこと)を拡張して、選択しているファイルのファイル名を表示するプラグインを作成しています。
一番簡単なやり方は
- プラグイン開発 >> プラグイン・プロジェクト >> プロジェクト名~
(プロジェクト名はたとえばnu.mine.kino.sampleとか)
-プラグイン・コード生成プログラム >> デフォルト・プラグイン構造~
(何も追加しない単純なテンプレート)
後はすべてデフォルトでOKでよいです。ウィザードが完了すると、単純なプラグイン・プロジェクトの作成完了です。
基本的な構成はできたので、次はプラグインファイル(plugin.xml)の記述です。手順は
-プラグインエディタの拡張タブ >> 追加 >> 汎用ウィザード >> スキーマベースの拡張
-拡張ポイントを org.eclipse.ui.views を選択
-プラグインエディタの拡張タブより、org.eclipse.ui.viewsを右クリック >> 新規 >> Category を追加(Viewを属させるグループの作成)
-さらに拡張タブより、org.eclipse.ui.viewsを右クリック >> 新規 >> View を追加(実際のViewの作成)
とするとViewを追加できます。後はプロパティViewより必要事項を入力します。
ただのビューを表示するだけなら
<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)のスケルトンもウィザードが作ってくれます。
**覚え書き [#j62d232a]
*** アクティブなエディタへの参照の取得 [#uf7ea3d1]
// ワークベンチの取得
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
//アクティブなエディタの取得
IEditorPart editor = window.getActivePage().getActiveEditor();
AbstractTextEditor aEditor = (AbstractTextEditor) editor;
*** エディタ内のドキュメントを取得 [#o1b1fa35]
IDocument document =
aEditor.getDocumentProvider().getDocument(editor.getEditorInput());
***プラグインのディレクトリを取得する [#rf1a32e3]
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すればよいでしょうか。
***外部のライブラリを使用する [#dc5c9f14]
プラグインディレクトリにlibディレクトリなどを作成しておいて、plugin.xmlで
<runtime>
<library name="hoge.jar"/>
<library name="lib/fuga.jar"/> <-外部ライブラリ
</runtime>
とすればOKです。
*** プロジェクトへの参照を取得する [#u15a6a98]
いわゆるEclipseのプロジェクトへの参照を取得する方法です。
IWorkspaceRoot myWorkspaceRoot =
ResourcesPlugin.getWorkspace().getRoot();
IProject project = myWorkspaceRoot.getProject([プロジェクト名の文字列]);
***ポップアップメニューの拡張 [#sfc14d79]
<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>
***デバッグするためのダイアログを出したい [#a91aa3cd]
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
Shell shell = window.getShell();
MessageDialog.openInformation(shell, "タイトル","メッセージ");
が定番でしょう。windowオブジェクトはメソッドを記述するクラスによってはフィールドから得られたりしますが。。
***ウィンドウに配置されているViewを取得する。 [#z76cff34]
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());
}
***プラグインのパッケージング手順 [#i4b96068]
-build.propertiesに、パッケージしたいものを記述する(bin.includesにlib/hoge.jarとかicons/*とか)
-plugin.xmlの右クリック >> Antビルドファイルの作成 でbuild.xml作成
-javac要素はソースコードのエンコーディングが考慮されてないので、追加(encoding="EUC-JP"など)。
-ant zip.pluginでZIPが作成される。
-完了。
トラブル(↓メモ書き状態)
-plugin.xmlの右クリック>>Antビルドファイルの作成 は、コンパイルのエンコーディングが考慮されない(encoding="EUC-JP"などを追加する必要あり)
-build.propertiesに、パッケージしたいものを記述する(bin.includesに書く)
***パッケージ化するとインスタンスを生成できない。 [#kecb2ad7]
[[パッケージ化するとインスタンスを生成できない。:http://groups.yahoo.co.jp/group/eclipse-ml/message/1019?expand=1]]
私も同じトラブルに遭遇しました。
プラグインをパッケージングすると、何故かエラーになってしまうというもの。ビューを開こうとすると
インスタンスを生成できませんでした。
と言われてしまうんだけど、エラーを調べようにもどこにエラーが表示されているのかも分からないので困っていました。
そこでネットを探していたところ、同じような内容の投稿が。とりあえずこれを見て、プラグインのログは
-ウィンドウ→ビューの表示→その他→PDEランタイム→エラー・ログ で「エラーログビュー」を開く。
-エラーログビューで、該当エラーをダブルクリックし「エラーのプロパティー」を開く。
-「状況詳細」を選択します(状況詳細はない場合もあります)。→ここにStackTraceなどが表示されます。
というところまで分かりました。感謝!!
そのエラーログを見ると、xml関連のライブラリがないと。どうもプラグインをパッケージした場合と、ランタイムワークベンチで稼動しているVMのバージョンの違いが原因でした。((WebSphereStudioはJ2SE1.3だったためだ〜))
plugin.xmlに、
<library name="lib/xercesImpl.jar"/>
<library name="lib/xml-apis.jar"/>
を追加して、ようやく動きました。疲れた...。。。
***関連リンク [#dc95429f]
-[[プラグイン開発の2.1系のJavaDoc:http://download2.eclipse.org/downloads/documentation/2.0/html/plugins/org.eclipse.platform.doc.isv/reference/api/index.html]]
-[[ObserveEclipse:http://www13.plala.or.jp/observe/index.html]]
-[[パースペクティブのカスタマイズ:http://www.eclipse.org/articles/using-perspectives/PerspectiveArticle.html]]
-[[本家のドキュメントのサイト:http://www.eclipse.org/documentation/main.html]]
***[[Eclipseプラグイン開発:http://yoichiro.cocolog-nifty.com/eclipse/]] [#yd461a90]
#showrss(http://yoichiro.cocolog-nifty.com/eclipse/index.rdf,,24,1)
----
この記事は
#vote(おもしろかった[5],そうでもない[1])
#vote(おもしろかった[6],そうでもない[1])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}