Javaのclasspathオプションの指定
指定したパスにclassファイルがあるにもかかわらず,エラー(NoClassDefFoundError)になる場合がある.クラスパスに指定したパスの形式(DOS/Windows形式なのかCygwin/UNIX形式なのか)が原因である.
テスト用に以下のプログラムを作ってコンパイル.c:\tmpにおいた.
Sam.java
public class Sam{
public static void main(String[] args){
System.out.println("hello world.");
}
}
クラスパス(-cpまたは-classpathオプション)にCygwin/UNIX形式でパスを指定すると,指定したディレクトリにclassファイルがあってもエラーとなる.
$ ls /cygdrive/c/tmp/Sam.class
/cygdrive/c/tmp/Sam.class*
$ java -cp /cygdrive/c/tmp Sam
Exception in thread "main" java.lang.NoClassDefFoundError: Sam
DOS/Windows形式なら動く.
$ java -cp c:/tmp Sam
hello world.
$ java -cp c:\\tmp Sam
hello world.
クラスパスではなくjarを指定する場合も同様である.まず,上述したサンプル用のプログラムでjarファイルを作ろう.
Sam.mf(マニフェストファイル−mainメソッドのあるクラスを記述)
Main-Class: Sam
jarファイルを作る.
$ jar cfm Sam.jar Sam.mf *.class
Cygwin/UNIX形式だとエラー.
$ ls /cygdrive/c/tmp/Sam.jar
/cygdrive/c/tmp/Sam.jar*
$ java -jar /cygdrive/c/tmp/Sam.jar
Unable to access jarfile /cygdrive/c/tmp/Sam.jar
DOS/Windows形式なら動く.
$ java -jar c:/tmp/Sam.jar
hello world.
$ java -jar c:\\tmp\\Sam.jar
hello world.