3

別の Java プロジェクトからすべてのパッケージ名を取得したいのですが、できればリフレクションを使用して Java でこれを行うにはどうすればよいですか?

プロジェクトをビルド パスにインポートし、以下のコードを使用してパッケージ名を取得しようとしました。

Package[] pack = Package.getPackages();

編集:私は jar ファイルを使用していません。同じディレクトリにあるため、プロジェクトをインポートしました。私が作成したパッケージ、特に特定のディレクトリで始まるパッケージのみが必要です。

4

2 に答える 2

6

getPackages()クラスローダーに認識されているものだけがリストされるため、使用するだけではライブラリ内のすべてのパッケージ名を知ることはできません。これは、クラスがまだ特定のパッケージからロードされていない場合、リストに表示されないことを意味します。

zip ファイル処理ルーチンを使用して jar ファイルを開き、ディレクトリ名でパッケージを読み取ります。この手法を使用すると、まだ「使用されていない」パッケージも含め、すべてのパッケージ名を検出できます。基本的に、ファイルを含むパスはすべて.class「パッケージ名」です。

---- 詳細は JAR ファイルが使用されていないことを示しているため編集 ---

JAR ファイルを使用していないので (そしてなぜですか? JAR ファイルは非常に優れています!)、ディレクトリをスキャンする必要があります。ディレクトリを「見つける」には、クラスパスを切り刻む必要があります。クラスパスを取得する方法は次のとおりです。

 String classpath = System.getProperty("java.class.path", null);

.class次に、ファイルが含まれている各「開始点」の下にあるすべてのディレクトリを検索します。それらをすべて取得したら、すべてのパッケージを取得します。

繰り返しになりますが、クラスローダーがすべてのクラスをロードしたことを何らかの方法で保証できない限り (通常はそうではありません)、クラスローダーに尋ねるだけですべてのパッケージを知ることはできません。

于 2012-08-29T19:31:38.757 に答える