这是我的文件夹:
$ tree
.
├── src
│ ├── Main.class
│ ├── Main.java
│ └── xyz
│ └── bitfish
│ ├── Fish.class
│ └── Fish.java
如果我尝试在当前文件夹中执行Main.class,它将失败:
$java src/Main
Error: Could not find or load main class src.Main
Caused by: java.lang.NoClassDefFoundError: Main (wrong name: src/Main)
$ java src.Main
Error: Could not find or load main class src.Main
Caused by: java.lang.NoClassDefFoundError: Main (wrong name: src/Main)
但是,如果我尝试在src文件夹中执行此操作,那就没问题了
$ cd src
src$ java Main
// it works
出什么问题了?如何在任何文件中执行Main.class?
答案 0 :(得分:4)
尝试使用以下命令:
java -classpath src Main
输入命令时
java src / Main->然后,java不仅尝试使用src文件夹中的类;但它也假设该软件包是src.Main;因此尝试以这种方式执行该操作会给您带来错误;除非由Main.java-> Main.class定义的类与在目录src中不同,否则都在“ src”包中。
答案 1 :(得分:3)
运行java -help
时,将得到以下输出:
Usage: java [options] <mainclass> [args...]
(to execute a class)
...
此短消息表示<mainclass>
,它的意思是“ Java类的完全限定名称,而不管它在文件系统中的保存位置”。
运行java src.Main
或java src/Main
时,您告诉java
命令运行类src.Main
,该类在类路径中不存在。
要解决此问题,请将类路径设置为src
(因为这是.class
文件所在的位置),然后运行名为Main
的类:
java -classpath src/ Main