Java error: cannot find symbol, but everything is in the same package
Java error: cannot find symbol, but everything is in the same package
我在命令行中遇到 运行 java class 问题。
它在 IntelliJ IDE 中运行得非常好,但是当我尝试编译我的模拟器 class 时,它会抛出一个错误
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 并且它可以工作,但没有为 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
并且您希望 class 文件位于 /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
使用-class路径
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
*) 我四舍五入了。
我在命令行中遇到 运行 java class 问题。 它在 IntelliJ IDE 中运行得非常好,但是当我尝试编译我的模拟器 class 时,它会抛出一个错误
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 并且它可以工作,但没有为 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
并且您希望 class 文件位于 /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
使用-class路径
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
*) 我四舍五入了。