3

JavaProject で動作するEclipse プラグインを作成しました。プロジェクトのクラスのバイトコードに含まれる情報にアクセスする必要があるため、URLClassLoader を使用して (クラスがプロジェクトの「bin」フォルダーにあることを伝えます)、クラスへの参照を取得し、すべてを取得します。私が必要とする情報。残念ながら、メソッドを呼び出すと、loadClass("a certain class in JavaProject")次のタイプのエラーが発生します。

org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javassist/bytecode/BadBytecode

この種のエラーは、JavaProject のBuildPathに追加された外部ライブラリがクラスローダーによって「認識 」されていないことが原因であることがわかりました。これらのライブラリのクラスは、JavaProject のクラスによって使用されます。

前のケースでは、 JavaProjectのクラスのこのステートメントでライブラリ javassistのBadBytecode クラスが使用されました

public static void main(String[] args) throws NotFoundException, BadBytecode, IOException, CannotCompileException{

では、Java プロジェクトにインポートされた外部ライブラリのクラスに自分のプラグインが見えるようにするにはどうすればよいでしょうか?

4

2 に答える 2

1

ビルド パスをトラバースするための API を持つ IJavaProject を提供する JavaCore.create( [IProject] ) API を使用して、Java プロジェクトのビルド パスにアクセスできます。そうは言っても、これは絶対にやるべきではありません。URLClassLoader には既存のクラスをリロードするという概念がないため、ユーザーがコードを編集しても更新されたバージョンが表示されず、jar ファイル (ビルド パス上のファイルなど) をロックする傾向があります。JDT には、クラス ローダーの使用を伴わない Java プロジェクトの型構造を安全にトラバースするための API があります。

于 2013-05-03T17:52:47.780 に答える