%CLASSPATH%を設定していません。私が理解しているように、Javacは現在のディレクトリのクラスパスを想定しているため、これは問題にはならないはずです。
以下に示すように、javacは、まったく同じディレクトリにあるにもかかわらず、私のCase
クラスを見つけることができません。なぜこれが起こっているのかについて何か考えはありますか?このコードは、Eclipseを使用すると正常に機能します。
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>dir /B
Case.class
Case.Java
EntryPoint.Java
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>javac EntryPoint.Java
EntryPoint.Java:16: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
ArrayList<Case> cases = new ArrayList<Case>();
^
EntryPoint.Java:16: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
ArrayList<Case> cases = new ArrayList<Case>();
^
EntryPoint.Java:24: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
cases.add(new Case(new Integer(count), line));
^
3 errors
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>
更新1:
パッケージルート(src)からコンパイルしようとすると、新しいエラーが発生します(Case.classファイルを削除した後でも)
C:\Documents and Settings\joep\My Documents\GCJ\src>javac -cp . codejam2011/Round0/D/EntryPoint.Java
codejam2011\Round0\D\EntryPoint.Java:16: cannot access codejam2011.Round0.D.Case
bad class file: .\codejam2011\Round0\D\Case.Java
file does not contain class codejam2011.Round0.D.Case
Please remove or make sure it appears in the correct subdirectory of the classpath.
ArrayList<Case> cases = new ArrayList<Case>();
^
1 error
C:\Documents and Settings\joep\My Documents\GCJ\src>
更新2:別のパッケージからCase.Javaファイルを取得しているようです。
C:\Documents and Settings\joep\My Documents\GCJ\src>javac -d ../classes codejam2011\Round0\D\*.Java
.\codejam2011\Round0\D\Case.Java:4: duplicate class: codejam2011.Round0.C.Case
public class Case
^
codejam2011\Round0\D\EntryPoint.Java:16: cannot access codejam2011.Round0.D.Case
bad class file: .\codejam2011\Round0\D\Case.Java
file does not contain class codejam2011.Round0.D.Case
Please remove or make sure it appears in the correct subdirectory of the classpath.
ArrayList<Case> cases = new ArrayList<Case>();
^
2 errors
C:\Documents and Settings\joep\My Documents\GCJ\src>
パッケージ内からではなく、パッケージルートからコンパイルする必要があります。
したがって、cd
をsrc
フォルダーに移動し、そこからコンパイルします。
javac -cp . codejam2011/Round0/D/EntryPoint.Java
更新:新しい問題に従って、同じ方法でCase.Java
を再コンパイルする必要があります。それは明らかに同じ間違った方法でコンパイルされました(パッケージ内から)。
パッケージのルートディレクトリからコンパイルしても問題が解決しない場合(他の回答を参照):
したがって、ファイルがcodejam2011\Round0\D\Case.Java
の場合、最初の宣言としてpackage codejam2011.Round0.D;
を含み、次にpublic class Case { ... }
を含む必要があります。また、このパッケージとクラス宣言を含む他のソースファイルがないことを確認してください。
エラーメッセージから、パッケージステートメントは代わりにpackage codejam2011.Round0.C;
のように見えます(また、実際のcodejam2011.Round0.C
パッケージにはクラスCase
があります)。
コンパイルするために間違ったディレクトリにいます。
location: class codejam2011.Round0.D.EntryPoint
これは、パッケージがcodejam2011.Round0.D(これは規則(すべて小文字)に反しますが、要点を超えていることを示しています...
codejam2011の親ディレクトリであるsrcにcdしますね?
javac codejam2011\Round0\D\EntryPoint.Java
トリックをするかもしれません。
多くの場合、「bin」や「classes」などのコンパイル済みクラス用のディレクトリがあります。そこでクラスを作成するには、-d(宛先)を使用します。
javac -d ../classes codejam2011\Round0\D\EntryPoint.Java