2013-12-13 4 views
0

Я создал файл jar, который содержит основной класс и его зависимую банку. Я написал свой собственный манифест, чтобы включить в него также зависимости. Проблема возникает, когда я пытаюсь запустить файл jar; она дает мне следующее:получение исключения во время выполнения при запуске jar

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

здесь структура папок содержание

ExcelCopy.jar 
| 
|-com/utility/ExcelFormat.java 
| 
|-lib/poi-3.9.jar 
| 
|-META-INF/Manifest.mf 

Manifest.mf

Manifest-Version: 1.0 
Class-Path: lib/poi-3.9jar 
Created-By: 1.7.0_25 (Oracle Corporation) 
Main-Class: com.utility.ExcelFormat 
+0

Если вам требуется что-нибудь, сообщите мне – Pulkit

+2

, как выглядит ваш 'Manifest.txt'? Кроме того, его следует переименовать в «MANIFEST.MF». – asgs

+0

извините за опечатку, я опубликовал содержание файла манифеста .. PLS имеют вид – Pulkit

ответ

2

Вам не нужно связывать Lib/Пои-3.9.jar в вашем ExcelCopy.jar. Удалите его из кувшина, то вы будете иметь:

ExcelCopy.jar 
| 
|-com/utility/ExcelFormat.java 
|-META-INF/Manifest.mf 

Тогда у вас есть:

ExcelCopy.jar 
lib/poi-3.9jar 

Запуск "Java -jar ExcelCopy.jar" будет работать.

+0

, но класс ExcelFormat использует poi-3.9.jar. Если я удалю его из jar, то как класс будет работать? – Pulkit

+1

Оставьте это вне ExcelCopy.jar. В моих проектах я использую много сторонних библиотек, это распространенная практика, чтобы ссылаться на них вне вашего собственного JAR. В файловой системе, вы будете иметь что-то вроде: C: \ MYDIR \ ExcelCopy.jar C: \ MYDIR \ Lib/пои-3.9jar Затем запустите "Java -jar ExcelCopy.jar" из C: \ MYDIR. Относительный путь указан в Class-Path вашего MANIFEST. – shuang

+0

shuang теперь текущая структура папок d: /ExcelCopy.jar d: /lib/poi-3.9.jar Но все же я получаю ту же ошибку – Pulkit

0

Thanx @shuang. Я пробовал простую логику и работал Я извлек необходимые классы из poi-3.9.jar, так что теперь у меня есть вызов папки org, в котором все необходимые классы.

ExcelCopy.jar 
| 
|----com/utility/ExcelFormat.java 
| 
|----org/apache(long dir structure) 
| 
|----META-INF/Manifest.mf 

и содержание Manifest.mf

Manifest-Version: 1.0 
Class-Path: org 
Main-Class: com.utility.ExcelFormat 

Теперь моя баночка работает. : D

+1

Хотя это работает, я настоятельно рекомендую использовать решение, предоставленное Shuang. Это более аккуратно, так как ваши классы упакованы в ваш собственный файл Jar, и все необходимые зависимые файлы Jar ссылаются отдельно, не смешивая ничего. Если вы хотите упаковать все это в один файл, просто установите tar или закройте папку-заглушку. – asgs

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