(Примечание: я знаю, что здесь я не использую стандартные соглашения об именах. Имена приведены просто для простоты.)
У меня есть файл с именем 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)
Почему я должен находиться за пределами каталога, чтобы разрешить запуск файла?