如何在任意文件夹中执行Java类?

4
这是我的文件夹:
$ 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?

2
使用 java -cp src Main - Maurice Perry
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.Main或者java src/Main时,你告诉java命令去运行名为src.Main的类,但实际上这个类并不存在于classpath中。
为了解决这个问题,需要将classpath设置为src(因为这里是.class文件所在的地方),然后运行名为Main的类。
java -classpath src/ Main

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接