Запуск Java-программы из командной строки - PullRequest
2 голосов
/ 27 марта 2012

так что у меня здесь момент 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», потому что это имя пакета, под которым он находится. Я в тупике. Спасибо за помощь.

Ответы [ 5 ]

8 голосов
/ 27 марта 2012

Ваш класс объявлен в пакете org.openmetadata.main.

Чтобы Java правильно загружал класс, он должен быть в правильной структуре каталогов, соответствующей структуре пакета.

Таким образом, файлы классов для org.openmetadata.main.OmadUpdate должны находиться в каталоге org\openmetadata\main.

Затем, когда вы запускаете команду java, корень этой структуры каталогов должен находиться в пути к классам - для простого примера это просто означает, что ваш текущий каталог должен быть родительским каталогом org\openmetadata\main.

При запуске java необходимо указать полное имя класса, используя точки, а не косые черты, т.е.

java org.openmetadata.main.OmadUpdate
4 голосов
/ 27 марта 2012

После того, как вы скомпилируете класс с помощью javac, у вас будет следующая структура каталогов:

org/
  openmetadata/
    main/
      OmadUpdate.class
      OmadUpdate.java

Убедитесь, что вы находитесь в родительском каталоге org, затем запустите

java -cp . org.openmetadata.main.OmadUpdate
2 голосов
/ 27 марта 2012

Имена классов имеют имена вложенных пакетов, разделенные точками, а в каталогах используются косые черты. Хорошие шансы, что вы пробовали java -cp . org/openmetadata/main/OmadUpdate, когда вы должны были (так как вы указываете имя класса) попробовать java -cp . org.openmetadata.main.OmadUpdate

Обратите внимание, что для того, чтобы это работало, вы должны запустить его в каталоге чуть выше подкаталога org. В противном случае директива classpath cp . начнет поиск в неправильном каталоге.

0 голосов
/ 27 марта 2012

-ср. не буду ничего делать, я не думаю. Вы должны убедиться, что вы вызываете Java в правильном каталоге, который является частью имени / папки первого пакета (в вашем случае org)

Вам нужно использовать полный пакет и имя класса для его запуска.

0 голосов
/ 27 марта 2012

запустите ваше Java-приложение с набором classpath:

java -cp . org.openmetadata.main.OmadUpdate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...