Class Searcher

作成 2003/12/6

小物プラグインを1つ作ってみました。クラスファイルなどのリソースが、どこにあるか検索するプラグインです。ていうか、ClassLoader#getResource(name)するだけですが、プラグイン上からクラスパスを検索します。

ダウンロード

com.muimi.cs_0.1.0.zip 2003/12/6

インストール

ダウンロードしたファイルを展開し、pluginsフォルダにコピー、Eclipseを再起動します。

実行

Eclipseのメニューから「ウィンドウ」→「パースペクティブのカスタマイズ」→「その他」→「muimi」をチェックし、「OK」を選択します(あるいは、Javaかリソースパースペクティブを閉じて開きます)。

Eclipseのメニューから「検索」→「Classpath Search」を選択します。

ダイアログボックスが表示されるので、リソースパスを入力します。 クラス名を入力するときは、パッケージは"."でなく"/"で区切り、 ".class"の拡張子をつけることに注意してください。 例えば、org.w3c.dom.Documentクラスを検索するときは、org/w3c/dom/Document.classと入力します。

「OK」を選択すると、結果がコンソールに表示されます。

検索は、(CSPluginをロードした)PluginClassLoaderおよび、システムクラスローダーの2つから行われます。

指定したクラスは、JDKのクラスなので、システムのクラスローダーに含まれます。また、ファイルは、C:\j2sdk1.4.2/jre/lib/rt.jarに含まれていることが分かります。

次の例では、com/muimi/cs/CSPlugin.classは、PluginClassLoaderでロードされていることが分かります。その親のURLClassLoaderやシステムクラスローダーからはロードされていません。親クラスがリフレクションで、このクラスインスタンスを作る場合は、ClassNotFoundになります。

他のプラグインからの利用

自分が作成しているプラグインから利用するには、plugin.xmlに次の記述をします。

 <requires>
    <import plugin="org.eclipse.core.resources"/>
    <import plugin="org.eclipse.ui"/>
    <import plugin="com.muimi.cs"/>
 </requires>

プラグイン中のコードから以下のようにメソッドを呼び出してください。

CSPlugin.openSearchDialog(MyClass.class.getClassLoader());

ダイアログボックスの入力を省きたい場合は、以下のメソッドも利用できます。

CSPlugin#dispResource(ClassLoader loader, String path)

補足

このプラグインを作ったのは、EJBクライアントのプラグインを作成していたときに、単純にInitialContextFactoryを含むJARをruntimeに指定しただけだと、うまく挙動しなかったのがきっかけでした(上のPluginClassLoaderからロードされているパターン)。同じクラスのバージョン違いのJARがあって、NoSuchMethodException(だっけな?)などが出てきたときにも使えるかもしれません。

プラグインにするまでもない、単なるコードの切れ端でも十分だったかもしれませんが、まあ、練習がてら作ってみました。あとコンソール出力はインチキです(今表示されているビューのDocumentを乗っ取ってる)。正しい方法あったら誰か教えてください。

@TODO

参考

JNDI Explorer(の説明)


UP| TOP