1

UrlClassLoader のデフォルトの子として作成し、すべての jar ファイルを追加しました

public void addFile(String path) throws MalformedURLException {
    String urlPath = "jar:file:/" + path + "!/";

    System.out.println("------------------");
    System.out.println("urlPath = " + urlPath);

    URL url = new URL(urlPath);
    System.out.println("url = " + url);
    super.addURL(url);
    System.out.println("g = " + getURLs().length);
    System.out.println("==================");


}

次に、ローダーからいくつかのクラスを取得しようとしています:

System.out.println("cl.loadClass() = " + cl.loadClass("com.company.project.SomeClass"));

クラスを正常に返します。

パッケージごとにすべてのクラスを見つけようとすると:

resources = cl.findResources("com/company/");

空の列挙を返します。なんで?

4

2 に答える 2

0

のJavaAPIClassLoaderは、パッケージ内のすべての要素を列挙するための標準的な方法を提供していません。独自のを使用するためClassLoader、JAR内でカスタム検索を実行する関数を実装できます。

いくつかのリンク。

同様の質問: クラスパスのJavaパッケージからすべてのクラスを読み取るにはどうすればよいですか?

Jarの読み方:JARファイル内のファイルを一覧表示するにはどうすればよいですか?

于 2010-11-22T08:36:56.417 に答える
0

私はfindResources()あなたがそれがすべきだと思うことをしないと思います。そのAPIドキュメントによると:

指定された名前を持つ URL 検索パス上のすべてのリソースを表す URL の列挙を返します。

それは、プレフィックスの一致をまったく行うようには思えません (考えてみれば、HTTP URL を考えると、それを行うことは不可能でしょう)。おそらく、構築されたすべてのベース URL で指定された完全な名前を探しますURLClassLoader。そのため、呼び出したときにクラスローダーが 5 つの JAR で構築されており、そのうちの 3 つがルートにfindResources("log4j.properties")ファイルを含んでいる場合、メソッドlog4j.properties3つすべてを返します。

于 2010-11-22T08:40:34.390 に答える