2013-07-10 7 views
1

Я видел, что этот вопрос задал много, но я до сих пор не могу найти решение для него. Ну, решение, которое работает для меня. У меня есть проект, который использует Apache POI, и я обязательно включил все внешние JAR. Проект компилируется и работает нормально, в затмении, но когда я запускаю банку с «java -jar Test.jar» Я получаю эту ошибку:NoClassDefFoundError Jar Ошибка для org/apache/poi/ss/usermodel/Лист

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Sheet

я не уверен, если это полезная информация, но я создал папку Lib для моего проекта и поместили там библиотеку poi. Это означает, что зависимости находятся в файле JAR, когда я его создаю, я подумал, что должен упомянуть об этом, потому что увидел несколько решений о том, что у вас есть только внешние банки рядом с исполняемым банком. Я также попытался установить свой путь к каталогу проекта.

Что мне кажется неправильным?

ответ

5

Apache POI JAR file нет в ваше время выполнения классов. Перестроить Test.jar со следующим манифеста записи в файле MANIFEST.MF

Class-Path: poi-3.9-20121203.jar 
+0

Я это сделал, но все равно получаю ту же ошибку. Это то, что я положил в свой манифест Класс-путь: lib/poi-3.9/poi-3.9-20121203.jar Я все еще управлял своей банкой с помощью «java -jar Test.jar» – Taztingo

+0

Выглядит нормально, проверьте, что вы иметь символ новой строки в конце файла манифеста. Также убедитесь, что манифест был правильно включен (путем открепления его от временной папки). Наконец, проверьте, правильно ли указан путь к файлу poi jar. – Reimeus

+0

У меня есть unjarred и проверен файл MANIFEST.MF. Файл был включен, у него была новая строка, и я уверен, что путь правильный. Является ли classpath из файла MANIFEST или из каталога проекта? – Taztingo

0

Вам необходимо указать путь к классам в файле манифеста файла Jar. See this official doc

Пример

Мы хотим загружать классы в MyUtils.jar в классе путь для использования в myJar.jar. Эти два JAR-файла находятся в одном каталоге.

Сначала мы создаем текстовый файл с именем Manifest.txt со следующим содержанием:

Class-Path: MyUtils.jar 
0

Когда команда java -jar [filename].jar выходит из строя, это почти всегда из-за одной из двух вещей:

  1. Ваш MANIFEST.MF перепутались и Безразлично Правильно задайте зависимости. Убедитесь, что все зависимости jar в файле манифеста указывают на банки, относительно родительского каталога вашего jar.

  2. Вам не хватает файлов .class, либо в вашей конкретной банке, либо в той, на которой вы зависите. Убедитесь, что ваша банка содержит org/apache/poi/ss/usermodel/Sheet.class или что ваша иерархия манифеста указывает на банку, содержащую этот класс.

0

Сначала проверьте, если ваша цель банка (Test.jar) представляет собой жир банки, содержащая всю необходимую зависимость.

$ jar tf Test.jar 

Вы должны увидеть папку lib/ там, содержащий все необходимые зависимости (в том числе Apache POI). Если это так, сделайте то, что предложили другие, добавьте POI Apache к вашему MANIFEST.MF.

О наличии ваших зависимостей в jar в отдельной папке, как вы предположили, это также возможно. Представьте свои зависимости, которые хранятся в папке lib/ вне вашего Test.jar. Вы можете запустить свой код с помощью этой команды:

$ java -cp ".:lib/*" org.Test.Main 

Он просто добавляет все .jars в папку lib/к вашему пути к классам.В этом случае вам также необходимо указать имя основного класса (полное имя).

0

Я также получил эту проблему и попытался Google это ..

я узнал, что я должен прочитать журнал регистрации ошибок

Я не могу спасти мой файл .xls так в моем случае после чтение ошибку я обнаружил, что баночка файл отсутствует я просто добавил файл банку пои-3.7-20101029, расположенный в внутр папке моего IReport

ex.YourIReportFolder/иРепорт/модули/внеш-poi.xx-хххх

надеюсь, что это поможет :)

Смежные вопросы