2

重複の可能性:
JAR から InputStream としてロードしていますか?

入力ストリーム (URL 接続など) から jar ファイルをロードし、それをクラスローダーにロードして実行することはできますか? 御時間ありがとうございます。

4

2 に答える 2

4

はい; URLClassLoaderこの目的のために意図されています。URL の配列からクラスをロードできます。

URL externalJar = new URL("http://example.com/app.jar");
URL localJar = new URL("C:/Documents/app.jar");
URLClassLoader cl = new URLClassLoader(URL[]{ externalJar, localJar });
Class<?> clazz = cl.loadClass("SomeClass"); // you now can load classes

InputStreamに基づいていない場合はURL、代わりにストリームの内容を一時的な jar ファイルに書き込んでから、上記のアプローチを使用してロードすることができます。( jar を完全にメモリにロードできます。つまり、一時ファイルは作成されませんが、カスタム ClassLoader を定義する必要があるため、この方法を正しく行うにはかなりの労力が必要です)。

于 2012-12-19T05:26:20.070 に答える
1
   public static URL getJarUrl(final File file) throws IOException {
        return new URL("jar:" + file.toURI().toURL().toExternalForm() + "!/");
    }

これは、Lib の URL を適切に取得します。これは、Jar ファイルが URL を取得しようとするときに奇妙なことを行うためです。

于 2012-12-19T05:29:57.403 に答える