クラスパスの設定

クライアントとしてのaxis2のモジュール展開処理について調べていた。
参考にしたサイトではシステムプロパティにリポジトリのパスを指定しろとあったのでその通りにしていたが、ステップ実行しているとどうやらクラスパスに指定したものも展開されるらしいのでリポジトリの指定はやめてクラスパスに入れてみた。
モジュールは普通にロードされたが、使用しているライブラリのロードに失敗する。
クラスローダを調べてみると、モジュールクラスがシステムクラスローダからロードされている。
システムクラスローダからはモジュールアーカイブ内のライブラリが参照できないのでロードできないということらしい。
はて、何でモジュール用のクラスローダが使われないのか?
モジュールのクラスロード処理を追ってみるとモジュール用のクラスローダは使用されているが親のシステムクラスローダが見つけてしまうので結果的にモジュールアーカイブは参照されていない。
システムクラスローダを調べてみるとモジュールアーカイブを参照するJarLoaderが設定されていた。
いやまあクラスパスに入れてるから当然といえば当然なんだが・・・
クラスパスとして使用されるのは拡張子がjarのものだけなんじゃなかったっけ?
モジュールアーカイブは拡張子がmarだからシステムクラスローダは無視すると思ってたんだけど。
拡張子で選別してるのはtomcatが/WEB-INF/libの中のファイルをクラスパスに設定する時の話か?


とりあえずライブラリを内包するモジュールアーカイブはクラスパスに設定しても使えないみたいね。