• 締切済み

CLASSPATHに二つのディレクトリ設定するとエラーが出る?

CLASSPATHを二つのディレクトリを設定するとエラーが出てしまいます。 理由が分からないので、お願いします! 【状況】 同じディレクトリに 次の2つのファイルがあります。 --- Main.java --- public class Main {  public static void main(String[] args) {   Sub x = new Sub();  x.test();  } } --- Sub.java --- public class Sub {  public void test() {   System.out.println("Sub !");  } } 【再現手順】 (1) デフォルトの CLASSPATH は空です。この状態でコンパイルしても問題ありません。 $ echo $CLASSPATH $ javac Main.java $ java Main Sub ! (2) CLASSPATH に . を設定します。この状態でコンパイルしてもやはり問題ありません。 (3) ところが、CLASSPATH にカレントディレクトリ「 . 」ともう一つのディレクトリ(何もファイルがありません)を設定してコンパイルすると、次のようにエラーが出てしまいます。 $ export CLASSPATH=.:tmp $ javac Main.java Main.java:3: シンボルを見つけられません。 シンボル: クラス Sub 場所 : Main の クラス Sub x = new Sub(); ^ ---------------- とりあえず、カレントディレクトリはCLASSPATHに指定してあるので、Sub.classは見つかるはずだと思うのですが、なぜエラーが出るのでしょうか? よろしくお願いします!!

みんなの回答

  • liwet
  • ベストアンサー率72% (18/25)
回答No.2

クラスパスに設定しているパスが、正しくないからだと思います。 tmpはカレントディレクトリの下にあるのですよね? だとすると、 export CLASSPATH=.:./tmp とするか、tmpの絶対パスを指定して、 export CLASSPATH=.:/foo/bar/tmp というような感じにすれば良いと思います。 ちなみに、区切り文字は、Windowsではセミコロン(;)ですが、UNIXではコロン(:)です。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/classpath.html http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/solaris/classpath.html

white-tiger
質問者

補足

ダブルコーテーションをつけて export CLASSPATH=".;tmp" としたらうまく行きました。 つまり、java for win は ; を要求するのですが、cygwin の bash が ; を「コマンドの終わり」と認識してしまうところからきたエラーのようです。

回答No.1

CLASSPATHの区切りが「:」(コロン)になっていませんか? 正しい区切り記号は「;」(セミコロン)です。

関連するQ&A