Как извинить java.class в любой папке? - PullRequest
0 голосов
/ 18 февраля 2019

Это моя папка:

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

0 голосов
/ 18 февраля 2019

Когда вы запускаете java -help, вы получаете такой вывод:

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

Это короткое сообщение говорит <mainclass>, и тем самым оно означает «полное имя класса Java, независимо от того, гдеон сохраняется в файловой системе ".

Когда вы запускаете java src.Main или java src/Main, вы указываете команде java запустить класс src.Main, которого нет нигде в пути к классам..

Чтобы это исправить, установите для classpath значение src (поскольку там находятся файлы .class), а затем запустите класс с именем Main:

java -classpath src/ Main
0 голосов
/ 18 февраля 2019

попробуйте использовать команду:

java -classpath src Main

когда вы даете команду

java src / Main -> тогда java не только пытается использоватькласс в папке src;но это также предполагает, что пакет src.Main;и поэтому попытка выполнить его таким образом приведет к ошибке;если класс, определенный Main.java -> Main.class, не находится в пакете "src", кроме того, что находится в каталоге src.

...