実行時にJARを動的にロードする必要があるプログラムがあります。私はこれを見て、URLClassLoaderを使用していますが、動作させる方法がわかりません。 JAR "openup.jar"は、プログラムと同じディレクトリにあります。URLClassLoaderを使用して動的にJARをロードしますか?
理想的私はその中に、個々のクラスを指定しなくても、このJARをロードできるようにしたいと思います。
実行時にJARを動的にロードする必要があるプログラムがあります。私はこれを見て、URLClassLoaderを使用していますが、動作させる方法がわかりません。 JAR "openup.jar"は、プログラムと同じディレクトリにあります。URLClassLoaderを使用して動的にJARをロードしますか?
理想的私はその中に、個々のクラスを指定しなくても、このJARをロードできるようにしたいと思います。
私は正常に使用:[?どうやって実行時に動的に瓶をロードする必要があります]
@SuppressWarnings("unchecked")
public void addURL(URL u) throws IOException {
URLClassLoader sysLoader = (URLClassLoader) ThisClass.class.getClassLoader();
URL urls[] = sysLoader.getURLs();
for (int i = 0; i < urls.length; i++) {
if (urls[i].toString().equalsIgnoreCase(u.toString())) {
return;
}
}
Class sysclass = URLClassLoader.class;
try {
Method method = sysclass.getDeclaredMethod("addURL", parameters);
method.setAccessible(true);
method.invoke(sysLoader, new Object[] { u });
} catch (Throwable t) {
throw new IOException("Error, could not add URL to system classloader");
}
}
ほぼ同じソリューションが実際のHow should I load Jars dynamically at runtime?
それは恐ろしいアイデアのように見えます。それは、何も保証されていない多くの前提を作ります:1.) 'ThisClass'のクラスローダーは' URLClassLoader'です。 2) 'URLClassLoader'クラスには' addURL'メソッドがあり、それは 'setAccessible()'を呼び出すことができます(つまり、セキュリティマネージャは実行されておらず、禁止されています)。 –
はい、それは本当ですが、私の場合はうまくいきます。より洗練されたソリューションがありますか? – morja
Morjaさん、ありがとうございました*私はコードを正しく理解すれば、これは私が後にしたことをするかもしれませんが、そうでなければまだ答えがあったので、ありがとうございます。 – Myn
が重複する可能性に提示されている(http://stackoverflow.com/questions/60764/how-should-i-load-jars-dynamic-at-runtime) – dogbane
「このJARを、その内部に何が入っているかを知ることなくロードしてください」という意味は?あなたはそれから正確に何をロードしたいですか? –
なぜ内部に何が入っているのかわからずにジャーをロードしたいですか? zipファイルとして処理したいのですか、Javaクラスをロードすることに興味がありますか? – pgras