Получение NoClassDefFoundError для включенного jar

#java #linux #eclipse #jar

#java #linux #eclipse #jar

Вопрос:

Я пишу Java-приложение и запускаю его на сервере Linux ec2. вчера программа работала нормально, и после того, как я изменил и упорядочил некоторые файлы и пакеты, у меня возникает эта проблема при выполнении программы:

Я запускаю программу с помощью этой команды:

 java -cp . main.Server
  

И получаем следующую ошибку:

 Exception in thread "Thread-0" java.lang.NoClassDefFoundError: org/json/JSONObject
    at main.Group.<init>(Group.java:28)
    at main.Server.run(Server.java:23)
Caused by: java.lang.ClassNotFoundException: org.json.JSONObject
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 2 more
  

Я запускал программу таким образом до внесения изменений:

 export CLASSPATH=$CLASSPATH:/home/ec2-user/java-json.jar
  

В папке bin выполните команду:

 java Server
  

И программа была запущена.
Поскольку я изменил имя пакета с имени по умолчанию на main , мне нужно запустить его с помощью команды java -cp . main.Server , но я получаю ошибку, написанную выше.

Я также попытался изменить .bash_profile и добавить это:

 CLASSPATH=$CLASSPATH:/home/ec2-user/java-json.jar
export CLASSPATH
  

Но это не помогло.
У меня нет ошибок в моем коде, и jar не сломан, поскольку он работал раньше. Что я должен сделать, чтобы исправить эту проблему?

Ответ №1:

Укажите файл jar в пути к классу следующим образом:

 java -cp .:/home/ec2-user/java-json.jar main.Server
  

Если ваш путь к классу действительно правильно задан в вашем .bash_profile , вы также могли бы сделать:

 java -cp .:$CLASSPATH main.Server
  

Комментарии:

1. Спасибо, это работает! Знаете ли вы способ включить jar, не записывая его в команду при каждом выполнении? Редактировать: Да, вторая команда отлично работает. Спасибо!

2. Вы могли бы использовать что-то вроде плагина сборки Maven для сборки исполняемого файла JAR, который включает все зависимости .