2011-07-29 7 views
3

特定のパッケージが現在のクラスローダーまたはシステムに認識されているかどうかをテストしたいと思います。 Package.getPackage(String name)がnullを返すように見えます。 ClassLoaderには同じように貼り付けられたメソッドが含まれていません。Java:パッケージ(名前を使用)が存在するかどうかのテスト...

パッケージが存在するかどうかをテストするためにクラスをロードするのではなく、確かに良い方法です。

任意のポインタをいただければ幸いです。

+0

こんにちはPL、サポート用のthanx(: –

答えて

4

Package.getPackage(String name)は、このジョブに適したツールです。必ず

  1. 正しくパッケージの名前を入力した作りのクラスローダが一致していることを確認してください
  2. 利用できるものを見るために Package.getPackages()を試してみてください - インスタンス getClass().getPackage()のためのテスト、その後 Package.getPackage(String name)

メソッドは現在のクラスローダーのみ(または現在のクラスローダーがnullの場合はSystemクラスローダー)のパッケージを検索します。パッケージ内のクラスが現在のクラスローダーにロードされていない場合、パッケージは存在しません。

+0

スレッドコンテキストクラスローダーを無視しているようです: –

1

クラスがそのパッケージから読み込まれていない限り、パッケージが存在するかどうかの情報を簡単に取得する方法はありません。 Package.getPackageは、指定されたパッケージのクラスがロードされている場合にのみ機能します。

  1. ロードクラス、またはパッケージから、クラスをインスタンス化:

    あなたのオプションがあります。

  2. クラスパスを検索し、クラスパス内のすべてのjars/dirをチェックします。

コードでもURLクラスローダーを使用している場合、2番目のオプションが失敗することがあります。

関連する問題