有两类:
package chess;
public class Main {
public static void main(String args[]) {
System.out.println("check");
Board board = new Board();
}
}
和
package chess;
public class Board{
public void initBoard() {
System.out.println("Board");
}
}
当我尝试编译Main.java时,它说:
javac src/chess/Main.java
srcchessMain.java:7: error: cannot find symbol
Board board = new Board();
^
symbol: class Board
location: class Main
srcchessMain.java:7: error: cannot find symbol
Board board = new Board();
^
symbol: class Board
location: class Main
2 errors
据我所知,这是一个非常流行的问题,但我不明白为什么它不能编译。它们的父文件夹是"chess",它们在同一个包中所以这个Board类从Main调用是合法的,我先编译Board,然后在外部编译它们:
javac src/chess/Board.java
javac src/chess/Main.java
在第二个javac上给出的错误消息。还能是什么呢?感谢任何帮助
这就是使用构建系统的原因。ide往往是内置的,所以您应该能够相当容易地开始使用。
如果你必须继续在这块石头上伤害自己,好吧,那么。在命令行上有一些简单的方法和一些困难的方法。
简单的方法:javac src/chess/*.java
,足够简单。
更困难的方法:包括src
作为-sourcepath
选项到javac
,或者,如果你想一次编译一个文件并扩展你的可达性(这是愚蠢的;这意味着你永远不能有一个类a提到类B,而B提到类a(使用-sourcepath
或*.java
来编译),javac没有被告知类文件应该去哪里,所以它把它们放在源文件旁边。这并不好,因为您将目录命名为src
,但它包含非源。如果名字会说谎,那就不好了,所以不要这样做。使用-d
开关告诉javac在哪里放置类文件,然后使用-cp
开关告诉javac在哪里找到它们:
## Option 1
mv src/chess chess # Fix bad names
rmdir src
javac chess/*.java
java -cp . chess.Main
## Option 2
mv src/chess chess
rmdir src
javac -sourcepath . chess/Board.java
javac -sourcepath . chess/Main.java
java -cp . chess.Main
## Option 3
mkdir bin
javac -cp bin -d bin src/chess/Board.java
javac -cp bin -d bin src/chess/Main.java
java -cp bin chess.Main
## The correct option
apt install maven
# or
brew install maven