System.setProperty("java.class.path", path);で目的のクラスが入っているjarファイルはクラスパスに追加してあり、「*sys-package-mgr*: processing new jar,…」というメッセージが出ることは確認しました。またJarの中にはデフォルトパッケージに入っているクラスと、org.foo.bar.bazに入っているクラスがあるのですがどちらもClassNotFoundExceptionになってしまいます。
System.getProperty("java.class.path", "[新しいクラスパス]")を設定することでクラスパスが変更されるということはないと思います。
下記に同じような質問が出されていますが、ClassLoaderを自作して解決したようです。
http://www.smg.co.jp/seminar/techsquare/javassist03.html
http://www2t.biglobe.ne.jp/~o_kiku/dynamicloader/
まずは、チャッチしてみるのも手かもしれませんが、
CLASSPATHのつづりが間違っている、とかないですよねw。
昔、CLASS_PATHに一生懸命定義して、失敗してたことがありました。
正しくはCLASSPATHですね。アンダースコア無し。
チャッチとはなんでしょうか?どちらのページにも書かれていないようですが。
またCLASSPATHの綴りは今回は間違える余地がありません。System.setPropertyを使っていますので。
あと、getClassLoader()で自分を読み込んだクラスローダを取得して、それを使って動的ロードしようとしているので、クラスローダが食い違うことが原因で例外が投げられたとも考えにくいと思います。
System.getProperty("java.class.path", "[新しいクラスパス]")を設定することでクラスパスが変更されるということはないと思います。
下記に同じような質問が出されていますが、ClassLoaderを自作して解決したようです。
setPropertyを使ってjava.class.pathプロパティの値を変更してもクラスパスは変更されないようですね。盲点でした。新しいClassLoaderインスタンスを作成する方針で試してみます。
追伸:ClassLoaderをextendsして新しいクラスローダを作成しました。うまく動いているようです。ありがとうございました。
http://www.nulab.co.jp/designPatterns/designPatterns4/designPatt...
すみません。「キャッチ」ですorz
エラー発生時に環境変数やパラメタの内容を確認してみるのが
解決の近道かもしれません。
kimizuさんはEclipseを使っておられないのでしょうか?CLASSPATHの綴りを間違えたり、例外をキャッチしてe.printStackTrace()しなかったりは、する方が難しいかと思います…。
ご回答ありがとうございました。
setPropertyを使ってjava.class.pathプロパティの値を変更してもクラスパスは変更されないようですね。盲点でした。新しいClassLoaderインスタンスを作成する方針で試してみます。
追伸:ClassLoaderをextendsして新しいクラスローダを作成しました。うまく動いているようです。ありがとうございました。