Почему я должен находиться вне папки пакета, чтобы правильно выполнить файл класса? - PullRequest
0 голосов
/ 15 ноября 2018

(Примечание: я знаю, что здесь я не использую стандартные соглашения об именах. Имена приведены просто для простоты.)

У меня есть файл с именем PackageTest.java. Его единственная цель - вывести на консоль строку с надписью «Это работает!». Он принадлежит пакету с именем main. В моей консоли я выполняю команду:

javac -d . PackageTest.java

При этом создается новый каталог (папка) с именем main, который содержит файл класса с именем «PackageTest.main». Я попал на CD в его родительский каталог и выполняю следующую команду:

java main.PackageTest

И тогда консоль читает:

This works!

Итак, файл выполнен. Это хорошо. Теперь я записываю CD в «основную» папку. Я выполняю команду:

java main.PackageTest

Только чтобы получить результат:

Error: Could not find or load main class main.PackageTest
Caused by: java.lang.ClassNotFoundException: main.PackageTest

Итак, я пробую эту команду:

java PackageTest

И теперь я получаю эту ошибку:

Error: Could not find or load main class PackageTest
Caused by: java.lang.NoClassDefFoundError: main/PackageTest (wrong name: 
PackageTest)

Почему я должен находиться за пределами каталога, чтобы разрешить запуск файла?

1 Ответ

0 голосов
/ 15 ноября 2018

Пакет (и папка) имеют смысловой смысл.Вы можете указать путь к классу, если вы используете абсолютный путь, вы можете переместиться куда угодно в своем дереве и все же запустить код.Также возможно использовать относительный путь.Мол,

java -cp .. main.PackageTest
...