Почему мой jar создает ошибку NoClassDefFoundError, когда класс указан в MANIFEST.MF? - PullRequest
0 голосов
/ 13 января 2011

Я создал jar в следующей папке usr/local/bin/niidle.jar, и мой файл MANIFEST.MF выглядит следующим образом:

  Manifest-Version: 1.0
  Main-Class: com.ensarm.niidle.web.scraper.NiidleScrapeManager
  Class-Path: hector-0.6.0-17.jar

Я проверил, что файл hector-0.6.0-17.jar также присутствует в папке:

/ Проекты / EnwelibDatedOct13 / Niidle / Библиотека / Hector-0.6.0-17.jar

Я не хочу давать полное имя пути к классу в файле MANIFEST.MF, потому что мне нужно запустить этот jar на другом компьютере. Поэтому я дал только имя файла jar Class-Path=hector-0.6.0-17.jar в файле MANIFEST.MF.

Несмотря на упоминание Class-Path в файле MANIFEST.MF, когда я запускаю это с помощью команды:

java -jar /usr/local/bin/niidle.jar arguments ...

Отображается сообщение об ошибке:

--Exception in thread "main" java.lang.NoClassDefFoundError:
me/prettyprint/hector/api/Serializer
     at
 com.ensarm.niidle.web.scraper.NiidleScrapeManager.main(NiidleScrapeManager.java:21)
 Caused by: java.lang.ClassNotFoundException:
 me.prettyprint.hector.api.Serializer
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
     ... 1 more

Пожалуйста, дайте мне решение для этого сообщения об ошибке.

1 Ответ

2 голосов
/ 13 января 2011

Class-Path является относительным или абсолютным по отношению к каталогу, в котором находится ваш JAR-файл.так что для вашего случая вы должны hector-0.6.0-17.jar в / usr / local / bin

...