環境
- Microsoft Windows 10.0.22000.856
- PowerShell 7.2.4
- Java 18.0.2.1
はじめに
Javaのpackage文を使用した際に、コンパイル( javac Main.java
)で エラー: シンボルを見つけられません
あるいは error: cannot find symbol
のようなエラーが出た場合の対処法について説明する。
ディレクトリ構成
6-1/(カレントディレクトリ)
├ Kouhan.java(commentパッケージに所属する)
├ Main.java
└ Zenhan.java(commentパッケージに所属する)
各ファイルの中身
『スッキリわかるJava入門 第3版』の練習問題6-1のコードを一部引用する。
Main.java
import comment.Zenhan;
public class Main {
public static void main(String[] args) throws Exception {
Zenhan.doWarusa();
Zenhan.doTogame();
comment.Kouhan.callDeae();
comment.Kouhan.showMondokoro();
}
}
Zenhan.java
package comment;
public class Zenhan {
public static void doWarusa() {
...
}
public static void doTogame() {
...
}
}
Kouhan.java
package comment;
public class Kouhan {
public static void callDeae() {
...
}
public static void showMondokoro() throws Exception {
...
}
}
原因
間違ったディレクトリ構成がエラーの原因であった。パッケージに属したクラスファイルが読み込まれるには、パッケージに対応した階層にフォルダを作成しクラスファイルを置く必要がある。
正しいディレクトリ構成
6-1/(カレントディレクトリ)
├ comment/
│ ├ Kouhan.java(commentパッケージに所属する)
│ └ Zenhan.java(commentパッケージに所属する)
└ Main.java
これで javac Main.java
を実行すると問題なくコンパイルできる。
また、java Main
で問題なく実行できる。
参考