カテゴリー別アーカイブ: プラグイン開発

jarパッケージをexport(jarを共有するプラグイン)

JARをEclipseプラグインとして共有したい場合

続きを読む

カテゴリー: Eclipse, プラグイン開発, 調査・検証 | コメントをどうぞ

プラグインを追加したらproduct起動時にエラーが発生

依存関係にプラグインを追加したところ、productを使用してプラグイン実行でエラーが発生した。

原因はプラグイン追加時に"*.product"にも追加が必要だった。"構成"タブを開いて"必須プラグインの追加"ボタンを押したら解消された。

カテゴリー: Eclipse, プラグイン開発, 調査・検証 | コメントをどうぞ

viewを新規作成

Eclipseプラグインで画面パーツを作るにはviewを作成します。

MANIFEST.MFの"拡張"タブで"org.eclipse.ui.views"を追加。
追加した"org.eclipse.ui.views"を右クリックして"新規"から"view"(Pleiadesで日本語化されていると"表示")を追加します。 ※"カテゴリー"を追加することでviewのカテゴリ分けも可能。

viewで設定可能な値
id:ビューを一意に特定できるID - 「(プラグインID).(view名)」
name:ビューの名称(国際化対応が望ましい)
class:ビューの実装クラス
カテゴリー:このviewを事前に作成しておいたcategory配下に置く場合、そのcategoryのidを設定
icon:
fastViewWidthRatio:
allowMultiple:
restorable:

カテゴリー: Eclipse, Java, プラグイン開発, 調査・検証 | コメントをどうぞ

viewをカテゴリ分けする

view は "拡張" に追加した "org.eclipse.ui.views" 拡張ポイントで定義できます。ここには"カテゴリー"も追加でき、"カテゴリー"を追加することで、その配下にviewを分類できます。

カテゴリで設定できる内容
id:カテゴリを一意に特定できるID - (プラグインID).(カテゴリ名)
name:カテゴリの表示名
parentCategory:2階層以上のカテゴリにする場合に上位の階層のカテゴリID

カテゴリー: Eclipse, Java, Tips, プラグイン開発 | コメントをどうぞ

EclipseプラグインでListenerパターンを実装する。

■拡張ポイント提供側(Lisnerへの通知側)
・CallBackに必要なメソッドを定義したインタフェースを作成
例)
public interface UpdateDataListenable {
//更新が通知された時に呼び出されるメソッド
void updateListen(List updatedData);
}

・拡張ポイントの実装
MANIFEST.MFを開いて、「拡張ポイント」タブを選択して「追加...」。ウィザードで拡張ポイントのIDと名前を入力する。

・スキーマファイルが作成されるので編集する。

今回の拡張ポイントでは、先に作成しておいたUpdateDataListenableの実装クラスを受け取りたいので「新規要素」を選択、任意の名前(拡張側で表示される)を決める。作成した要素で「新規属性」を選択し、属性名を入力する。Javaオブジェクトを必須で渡して欲しいので、「使用」は"require"、「型」は"java"、インタフェースで指定したいので「実装」に"UpdateDataListenable"を設定

・拡張ポイントに登録されたオブジェクトのリスナーメソッド(updateListen)を呼び出す処理を実装したクラスを作成する。

public class UpdateNotification
{
public static void notify(List updatedData)
{
IExtensionRegistry extRegistry = Platform.getExtensionRegistry();
IExtensionPoint point = extRegistry.getExtensionPoint([プラグインID].[拡張ポイントのID]);

for (IExtension extention : point.getExtensions())
{
for (IConfigurationElement element : extention.getConfigurationElements())
{
if (element.getName().equals("listener"))
{
try
{
Object observer = element.createExecutableExtension("class");
if (observer instanceof UpdateDataListenable)
{
((UpdateDataListenable) observer).updateListen(updatedData);
}
;
} catch (CoreException e)
{
e.printStackTrace();
}
}
}
}
}
}
このnotifyメソッドを呼び出せば、全リスナーへの通知が行われる仕組み。

■拡張ポイント利用側の設定(リスナー側)
・リスナーとして登録したいクラスにUpdateDataListenableをimplementしておく。

・先ほどの拡張ポイントを提供するプラグインを参照に追加しておく。(参照については説明を省略)

・MANIFEST.MFを開き、「拡張」タブで「追加...」を選択。先ほど定義した拡張ポイントを提供するプラグインID.拡張ポイントIDを選択する。

・「拡張要素詳細」に定義しておいた属性(listener)が表示されているので、参照を押してUpdateDataListenableを実装しておいたリスナークラスを指定。

この要領で、必要なリスナーを登録しておけば、プラグインの独立性を保ったままリスナーパターンが実装できる。

カテゴリー: Eclipse, Java, Tips, プラグイン開発 | コメントをどうぞ

プラグインのクラスを他のプラグインから使用できるようにする

Eclipseのプラグイン開発で、あるプラグインで別のプラグイン向けにクラスを公開する方法です。

パッケージ単位での公開になるので、公開してはいけないクラスとは別のパッケージに公開クラスを作成します。今回は"jp.profaim.export"パッケージ。公開するクラスは"OuterControl"クラスとしました。

MANIFEST.MFを開き、「ランタイム」の「エクスポートされるパッケージ」で「追加...」を押すとパッケージが選べます。先ほどの"jp.profaim.export"を選択すればOK。

ここからは別ステップなので省略しますが、利用側は上記プラグインを依存関係に追加しておけば、"import jp.profaim.export. OuterControl"として普通に使えます。

カテゴリー: Eclipse, Java, Tips, プラグイン開発 | コメントをどうぞ