如何在任何文件夹中执行java.class?

问题描述 投票:4回答:2

这是我的文件夹:

$ 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?

java javac
2个回答
4
投票

尝试使用命令:

java -classpath src Main

当你发出命令

java src / Main - >然后java不仅尝试在src文件夹中使用该类;但它也假设包是src.Main;因此尝试以这种方式执行它会给你一个错误;除非Main.java - > Main.class定义的类在包“src”中,而不是在目录src中。


3
投票

当你运行java -help时,你得到这个输出:

Usage: java [options] <mainclass> [args...]
           (to execute a class)
...

这个简短的消息说<mainclass>,并且它意味着“Java类的完全限定名称,无论它在文件系统中保存的位置”。

当你运行java src.Mainjava src/Main时,你告诉java命令运行类src.Main,它在类路径中的任何地方都不存在。

要解决此问题,请将类路径设置为src(因为这是.class文件所在的位置),然后运行名为Main的类:

java -classpath src/ Main
© www.soinside.com 2019 - 2024. All rights reserved.