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

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

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