javac不会扫描你的整个磁盘,你需要告诉它一切。没有人真正调用javac是有原因的,从来没有。他们运行mvn,gradle,或者设置了一个CI工具,或者让他们的IDE这样做。

如果你因为一些奇怪的原因而必须使用javac(帮你自己一个忙,学习maven的第一步,这真的不是很难,而且可以避免这种混乱),你需要告诉它去哪里找。有多种方法可以做到这一点:

假设您有以下文件:

/Users/zekrofire/projects/MyApp/src/StackCreator/MyApp.java
/Users/zekrofire/projects/MyApp/src/StackCreator/util/MyFastList.java
/Users/zekrofire/projects/MyApp/src/otherpkg/Something.java

您希望类文件位于/Users/zekrofire/projects/MyApp/bin

最简单的方法:一次编译所有的东西

忘掉src目录,混合java和类文件(如果您觉得这很难看,请参阅关于使用maven的注释)。然后,就。。。

javac *.java

这会解决你的问题。告诉javac关于每个源文件的信息。不幸的是,java不能递归地搜索每个java文件的整个目录,您必须执行以下操作:

cd /Users/zekrofire/projects/MyApp
cd src
mv -r * ..
cd ..
rmdir src
javac StackCreator/*.java otherPkg/*.java StackCreator/util/*.java

Use -classpath

cd /Users/zekrofire/projects/MyApp
javac -cp bin -d bin src/StackCreator/*.java

现在您可以一次编译一个文件。

Use -sourcepath

这并不像听起来那么酷,不要认为这可以让您跳过使用实际的构建系统。

cd /Users/zekrofire/projects/MyApp
javac -sourcepath src -d bin src/StackCreator/*.java

绝对的,最好的方式

apt install maven
; create a pom.xml file describing your deps
; move your source files to src/main/java as per
; maven standard
mvn compile