getPackages()
クラスローダーに認識されているものだけがリストされるため、使用するだけではライブラリ内のすべてのパッケージ名を知ることはできません。これは、クラスがまだ特定のパッケージからロードされていない場合、リストに表示されないことを意味します。
zip ファイル処理ルーチンを使用して jar ファイルを開き、ディレクトリ名でパッケージを読み取ります。この手法を使用すると、まだ「使用されていない」パッケージも含め、すべてのパッケージ名を検出できます。基本的に、ファイルを含むパスはすべて.class
「パッケージ名」です。
---- 詳細は JAR ファイルが使用されていないことを示しているため編集 ---
JAR ファイルを使用していないので (そしてなぜですか? JAR ファイルは非常に優れています!)、ディレクトリをスキャンする必要があります。ディレクトリを「見つける」には、クラスパスを切り刻む必要があります。クラスパスを取得する方法は次のとおりです。
String classpath = System.getProperty("java.class.path", null);
.class
次に、ファイルが含まれている各「開始点」の下にあるすべてのディレクトリを検索します。それらをすべて取得したら、すべてのパッケージを取得します。
繰り返しになりますが、クラスローダーがすべてのクラスをロードしたことを何らかの方法で保証できない限り (通常はそうではありません)、クラスローダーに尋ねるだけですべてのパッケージを知ることはできません。