【问题标题】:Java error: cannot find symbol, but everything is in the same packageJava 错误:找不到符号,但所有内容都在同一个包中
【发布时间】:2021-02-24 17:43:01
【问题描述】:

我在通过命令行运行 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 都有“package JavaClasses;”在文件的开头。 我已经尝试先编译 StackCreator,它可以工作,但对模拟器没有任何改变,仍然产生相同的错误。

【问题讨论】:

  • "但是当我尝试编译我的模拟器类时"请显示 javac 的命令行。
  • @AndyTurner 已经在帖子里了?
  • 在哪里?我正在寻找类似javac Simulator.java 的东西。您需要确保同时编译这两个文件(例如javac Simulator.java StackCreator.java),或者您在编译器的类路径中有StackCreator 类的预编译版本。这在您的 IDE 中有效,因为 IDE 将为您“只做”这样的事情。

标签: java intellij-idea javac


【解决方案1】:

javac 不会扫描您的整个磁盘,您需要告诉它所有内容。从来没有人* 真正调用过javac,这是有原因的。他们运行 mvngradle,或者设置了 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

*) 我向下取整。

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 2014-10-09
    • 1970-01-01
    • 2018-11-14
    • 2014-08-19
    • 1970-01-01
    • 2014-03-14
    • 2013-05-20
    • 2013-12-06
    相关资源
    最近更新 更多