从同一个包编译两个类



有两类:

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

最新更新