Запуск программы Java из командной строки
поэтому у меня есть момент noob здесь, я никогда не использовал командную строку для запуска Java-программы раньше, но мне нужно прямо сейчас. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь запустить программу, я получаю исключение ClassNotFoundException. Мой класс называется OmadUpdate. Я уже скомпилировал файл OmadUpdate.java в OmadUpdate.class с помощью команды javac. Я проверил каталог, и они оба точно там, однако, когда я запускаю команду java OmadUpdate, она дает мне сообщение об ошибке
Exception in thread "main" java.lang.NoClassDefFoundError: OmadUpdate (wrong name: org/openmetadata/main/OmadUpdate)
......
......
Could not find the main class: OmadUpdate. Program will exit
Но его прямо там в каталоге. Когда я печатаю dir, у меня есть как OmadUpdate.class, так и OmadUpdate.java. Я даже пытался использовать "java org.openmetadata.main.OmadUpdate", потому что это имя пакета, в котором оно находится. Я в тупике. Спасибо за помощь.
Ответы
Ответ 1
Ваш класс, как представляется, был объявлен в пакете org.openmetadata.main
.
Чтобы java правильно загрузил класс, он должен быть в правильной структуре каталогов, которая соответствует структуре пакета.
Итак, файлы классов для org.openmetadata.main.OmadUpdate
должны находиться в каталоге org\openmetadata\main
.
Затем, когда вы запускаете команду java
, корень этой структуры каталогов должен находиться в пути к классам - для простого примера это просто означает, что ваш текущий каталог должен быть родительским каталогом org\openmetadata\main
.
При запуске java
вам нужно указать полное имя класса, используя периоды без слэшей, т.е.
java org.openmetadata.main.OmadUpdate
Ответ 2
После компиляции класса с помощью javac у вас будет следующая структура каталогов:
org/
openmetadata/
main/
OmadUpdate.class
OmadUpdate.java
Убедитесь, что вы находитесь в родительском каталоге org, затем запустите
java -cp . org.openmetadata.main.OmadUpdate
Ответ 3
Названия классов имеют имена вложенных пакетов, разделенные точками, в то время как каталоги используют косые черты. Скорее всего, вы пробовали java -cp . org/openmetadata/main/OmadUpdate
, когда вам нужно (с тех пор, как вы указали имя класса), попробовали java -cp . org.openmetadata.main.OmadUpdate
Обратите внимание, что для этого необходимо запустить его в каталоге, расположенном чуть выше подкаталога org
. В противном случае директива classpath cp .
начнет поиск в неправильном каталоге.
Ответ 4
запустите приложение java с помощью набора pathpath:
java -cp . org.openmetadata.main.OmadUpdate
Ответ 5
-cp. не сделаю ничего, о чем я не думаю. Вы должны убедиться, что вы вызываете java в правильном каталоге, который является частью первого имени/папки пакета (в вашем случае org)
Чтобы запустить его, вам необходимо использовать полный пакет и имя класса.