jarファイルを実行時にクラスパスに追加する方法については、いくつかの投稿があります: - 現在のシステムクラスパスを取得してください。 - URLClassLoaderであるとします。 - リフレクションを使用して、保護されたaddURLメソッドのアクセスを設定します。 - 上記のメソッドを使用して、クラスパスにURLを追加します。ここでリフレクショントリックを使わずに実行時にクラスパスにjarファイルを追加する
は一例です: Adding files to java classpath at runtime
これは "厄介なハック" のように見える2と3段階のだから。
URLClassLoaderを拡張して現在の状態に設定するにはどうすればよいですか?私はクラスローダで少し混乱していて、次を試してみました:
public static void main(String... args) {
URLClassLoader loader = new URLClassLoader(new URL[]{new URL("file:jxl.jar")});
System.out.println(loader.loadClass("jxl.Workbook"));
Thread.currentThread().setContextClassLoader(loader);
System.out.println(Class.forName("jxl.Workbook"));
} // main
秒がうまく動作しながら、私は、4行目にClassNotFoundExceptionを取得します。 (どうしてそうですか?)
ああ...ありがとう...私はそれを忘れてしまった。しかし、もし私が4行目をSystem.out.println(jxl.Workbook.class)に変更するとどうなりますか? - 確かに、私はimport jxl。*をコンパイル中に提供するべきです - 実行時にも動作しません。 –
その場合、クラスパスにjxl.Workbookをコンパイルする必要があります。 jxl.Workbookなしで実行しようとすると、JVMはクラスをロードするときにNoClassDefFoundErrorをスローします – Joni
ああ、違う種類のエラーです。私は今、少しはっきりしていると思う。説明ありがとうございます! –