如何解决Java 错误:找不到符号,但所有内容都在同一个包中
我在通过命令行运行 java 类时遇到问题。 它通过 IntelliJ IDE 运行得非常好,但是当我尝试编译我的 Simulator 类时,它抛出一个错误
Simulator.java:4: error: cannot find symbol
private final StackCreator<String> myStack;
^
symbol: class StackCreator
location: class Simulator
Simulator.java:7: error: cannot find symbol
myStack = new StackCreator<>();
^
symbol: class StackCreator
location: class Simulator
2 errors
error: compilation failed
StackCreator 和 Simulator 都有“包 JavaClasses;”在文件的开头。 我已经尝试先编译 StackCreator 并且它可以工作,但是对于 Simulator 没有任何改变,仍然产生相同的错误。
解决方法
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 和 class 文件(如果您觉得这很丑陋,请参阅有关使用 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
使用 -classpath
cd /Users/zekrofire/projects/MyApp
javac -cp bin -d bin src/StackCreator/*.java
现在您可以一次编译一个文件。
使用 -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
*) 我四舍五入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。