今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

無応答

とある会社のJavaプロダクトを評価しようと思って、今朝からドキュメントを読んでいた。ちょっと疑問点があって、その会社のサイトにアクセスし、不明点を確認しようとしたんだが。。。

Could not connect to remote server.

なんて言われてしまった。昨日はアクセスできたのにぃ。
追記:午後はつながった。

CLASSPATH と NoClassDefFoundError

某ツールを評価中。
CLASSPATH はきちんと設定した。そして、以下のコマンドでツールを起動する。

java -jar hoge-tools.jar params

すると、NoClassDefFoundError が発生する。CLASSPATH をきちんと設定しているのに見えてないんだろうか?と、以下のコマンドを試す。

javap (NoClassDefFoundError が出たクラスの FQCN)

エラーにならない。クラスが見えている。なのに、なんで NoClassDefFoundError が?
ふと思い出す。hoge.jar を解凍してみる。すると、MANIFEST.MF の中に以下の設定があった。

Class-Path:hoge.jar

つまり、hoge.jar を CLASSPATH に追加しても意味が無かったのだ。hoge-tools.jar は hoge.jar が同じディレクトリに存在することを前提にしていた。。。(これって、分かりにくい仕様だよね)
そのような場合は、コマンドラインで以下のように指定すれば動作する。

java -jar (絶対パス)/hoge-tools.jar params

テストを実行するたびに結果が違う。。。

某ツールは JNI を使っている。で、JUnit の画面を起動しっぱなしでテストを繰り返すと、成功と失敗を交互に繰り返す。出ているエラーの内容は以下のとおり。

java.lang.UnsatisfiedLinkError: Native Library C:(snip)\hoge.dll already loaded in anothre classloader

JUnit って、実行するたびに新しい ClassLoader を作ってるんだろうか?で、テストが終わったときじゃなくて、テストを開始したときに前回生成した ClassLoader が GC されてる???
ちなみに、

    protected void tearDown() {
        System.gc();
    }

なんてやってみたけど改善されない。このコードが動くってことはまだ GC の条件を満たしてないんで、当然の結果なんだけど。。。
テストできないわけじゃないが、1回置きにエラーが出るって、気持ち悪いー。
気にしないようにしてるけど、すげー気になる。なんとかならんかのー。textui でやるしかない?
解決案ぼしゅー!
追記:ツールのベンダーにメールで問い合わせてみた。。。って、アメリカのベンダーだもんで、英語で質問してみたんだけど、通じるんだろうか?(^^;