Eclipse 3.0 プラグイン・マイグレーションの FAQ

Eclipse API の変更で 2.1 と 3.0 に非互換性が生じるのはなぜか?

Eclipse 3.0 は、Eclipse 2.1 の発展型です。Eclipse を開発するにあたり、全般的に完全な互換性を保つことのできない領域が存在しました。非互換となる 4 つの主な原因としては、以下があげられます。

非互換性については、Eclipse 2.1 と 3.0 の間の非互換性を参照してください。

2.1 プラグインは Eclipse 3.0 で機能するか?

機能します。ただし、いくつか例外があります。Eclipse 2.1 API にのみ依存するプラグインは、3.0 でも機能します。ごく一部の例外として、2.1 から 3.0 への変更で API の互換性が保たれなかった部分があり、そのいずれかをプラグインで使用する場合、これは機能しません。

内部パッケージのクラスを使用する 2.1 プラグインを使用する場合、これは、Eclipse 3.0 で機能するか?

Eclipse 2.1 API で指定されていない内部クラスまたは振る舞いに依存するプラグインの場合、プラグインが 3.0 で動作するかどうかに関するブランケット・クレームを作成できません。この場合には、実際に動作を確認する必要があります。

これまでのプラグインをそのまま Eclipse 3.0 で実行するには?

Eclipse 3.0 ベースの製品の eclipse/plugins/ サブディレクトリーに 2.1 プラグインをインストールして、Eclipse を再始動します。Eclipse では、このプラグインが未変換の 2.1 プラグインとして認識され (plugin.xml のヘッダーによる)、Platform プラグイン依存関係への変更を補正するよう自動的に調整が行われ、Platform 拡張ポイントの名前が変更されます。

Eclipse 3.0 で正しくコンパイルするために、2.1 プラグインを変更する必要はあるか?

いずれの場合も変更が必要です。Eclipse 2.1 と 3.0 では、すべてのプラグインについて実行のため変更が必要となる違いが存在します。2.1 用に作成されたプラグインを使用し、これを再コンパイルする場合、3.0 用に開発を進めるには、3.0 へのマイグレーションが必要です。

プラグインを Eclipse 3.0 にマイグレーションするには?

プラグイン・プロジェクトを Eclipse 3.0 ワークスペースにロード (インポート) したら、「PDE ツール」>「3.0 へのマイグレーション」 (プロジェクトのコンテキスト・メニュー) を使用して、プラグインのマニフェストを 3.0 形式に変換し、必要な Platform プラグインおよび名前変更された Platform 拡張ポイントの参照のリストを自動調整します。ほとんどの場合、これでプラグインのコードを正しくコンパイルして実行できるようになります。API 変更の非互換領域に依存していないことを確認するため、プラグインのコードを検討する必要があります。

非互換の API 変更に依存する場合、プラグインはコンパイル・エラーまたは警告を出すか?

いいえ。非互換の変更領域には、Java コンパイラーでフラグを立てることができないものがあります。

使用すべきではない API を使用して出されたコードの警告を無視して問題ないか?

短期的には問題ありません。できるだけ、廃止する API は即座に削除してしまわずに、使用すべきではないことをマークして作業を続けてください (ただし、限られた条件においてのみ)。このため、使用すべきではない API を緊急に取り除く必要はありませんが、廃止されていることが分かることによって、それなりに対処することが可能となります。プラグインでは、使用すべきではない API 使用をすべて適宜速やかに廃止する必要があります。

プラグインを Eclipse 3.0 にマイグレーションした場合、そのバイナリー・プラグインを Eclipse 2.1 にインストールして実行できるか?

いいえ。これはサポートされず、拡張ポイントの名前が変更されるため、おそらく機能しません。

org.eclipse.core.runtime.compatibility の目的は何か?

3.0 環境において、廃止された既存のコア・ランタイム API の一部から構成される OSGi ベースのランタイムに移行を図ります。可能な場合は、org.eclipse.core.runtime.* パッケージの廃止された API、およびこれに基づく実装が、org.eclipse.core.runtime プラグインから新規の org.eclipse.core.runtime.compatibility プラグインに移されています。デフォルトでは、新規に作成されるプラグインは org.eclipse.core.runtime に依存し、使用すべきではないランタイム API 以外の API のみを使用するものと想定されています。一方、2.1 からマイグレーションした既存のプラグインは、デフォルトで org.eclipse.core.runtime.compatibility に依存し、旧 API も使用することができます (org.eclipse.core.runtime.compatibility プラグインは、org.eclipse.core.runtime の API を再エクスポートする)。org.eclipse.core.runtime.compatibility プラグインは、Eclipse IDE 構成に組み込まれるものと思われますが、RCP 構成をベースとする製品では、不要なため、組み込まれることはないでしょう。

org.eclipse.ui.workbench.compatibility の目的は?

org.eclipse.ui.workbench.compatibility は、Eclipse 3.0 ベースの製品で実行される 2.1 プラグイン用に、拡張バイナリー互換性を提供するプラグイン・フラグメントです。3.0 では、IFile または IMarker に明示的に依存する 6 つのメソッドが org.eclipse.ui.IWorkbenchPage インターフェースから移動され、ワークスペースとリソースから完全にワークベンチを分離しています。org.eclipse.ui.workbench.compatibility フラグメントは、これらのメソッドを元に戻し、既存の 2.1 プラグインを変更することなく実行できるように調整を行います。ただし、移動されたメソッドを参照する 3.0 にマイグレーション済みのプラグインでは、コンパイル・エラーが生じることがあり、これは、org.eclipse.ui.ide.IDE にある置換メソッドを呼び出すことによってのみ解決できます。

ここに該当する IWorkbenchPage メソッドは、openEditor(IFile)、openEditor(IFile, String)、openEditor(IFile, String, boolean)、openEditor(IMarker)、openEditor(IMarker, boolean)、および openSystemEditor(IFile) です。