あなたはorg.eclipse.ui
バンドルを取得し、バージョンを確認するためにorg.eclipse.core.runtime.Platform
を使用することができます。
Version ui = Platform.getBundle("org.eclipse.ui").getVersion();
// then do something with that
登録MyListener
は> = 3.5、およびOldMyListener
そうでない場合。
EDIT:
右は、上記の実行時の動作の違いをキャプチャするための唯一の良いです。
Eclipseはいくつかのクラスをロードするためだけのトリックをサポートしています。
@ShiDoiSiが言及したトリックは、開発の観点から最も簡単です。
Bundle myBundle = org.osgi.framework.FrameworkUtil.getBundle(this.class);
Version ui = Platform.getBundle("org.eclipse.ui").getVersion();
Version cutOff = new Version(3,5,0);
final Executable processListener;
if (ui.compareTo(cutOff)<0) {
Class pc = myBundle.loadClass("my.pkg.OldListenerProcess");
processListener = (Executable) pc.newInstance();
} else {
Class pc = myBundle.loadClass("my.pkg.ListenerProcess");
processListener = (Executable) pc.newInstance();
}
processListener.execute(targetObject);
他のバンドルからの貢献がどのバージョンを使用することを決めることができるようにEclipseフレームワークの多くを使用して別のオプションは、独自の拡張ポイントを定義することになります。基本的には、バージョンチェックがプラグインの依存関係範囲によって行われる点を除いて、上記のパターンと同じです。Executable
の実行に寄与します。古い方法ではorg.eclipse.ui [0.0.0,3.5.0]に依存し、現在の方法ではorg.eclipse.ui 3.5.0(これは3.5.0ではオープンエンドの範囲です)を指定するだけです。次に、拡張機能を読み、提供されたクラスをインスタンス化することができます。
これに余分なプラグインを作成している場合(2つの違いが少し重い場合)、メインのプラグインにコマンドを定義し、余分なプラグインが同等のハンドラを提供できるようにします。プラグインは依存関係の範囲を持つ必要がありますので、1つだけが< 3.5または> = 3.5の場合にロードされます。コマンドAPIを使用すると、コマンドを実行できます(正しいハンドラが実行されます)。
ICommandService cmdS
= (ICommandService) workbenchWindow.getService(ICommandService.class);
Command process = cmdS.getCommand("my.pkg.ListenerProcess");
ParameterizedCommand cmd = new ParameterizedCommand(process, null);
IHandlerService handlerS
= (IHandlerService) workbenchWindow.getService(IHandlerService.class);
IEvaluationContext ctx = handlerS.createContextSnapshot(false);
ctx.addVariable("toAddListener", targetObject);
handlerS.executeCommandInContext(cmd, null, ctx);
その後ハンドラの実装は、あなたがExecutionEventから必要なオブジェクトを抽出するためにHandlerUtil.getVariable(event, "toAddListener")
を使用します。
のEclipse 3.1/3.2?私はあなたが本当に古いEclipseのバージョンをサポートする必要がある場合は、まず自分自身に尋ねるべきだと思います。 3.1が2005年にリリースされました。顧客/クライアントの中には古いバージョンのEclipseを使用している人がいたら、アップグレードを促すことに集中する必要があります。 – Fredrik
おかげフレドリックは、私はあなたのポイントが、バージョン3.4を取るだけで、2008年に出てきた - 少なくともこれをサポートするためにいいだろう。だから、私はそれが可能なのかどうかを調べることにはまだ興味があります。なぜならそれは問題である依存関係だけなのですから。 –