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