Запуск программы 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)

Чтобы запустить его, вам необходимо использовать полный пакет и имя класса.