2013-05-17 4 views
3

Структуры файлов в моей баночке:ClassPath в манифесте не работает

com/my/Main.class 
META-INF/MANIFEST.MF 
RXTXcomm.jar 

Manifest.mf состоит:

Manifest-Version: 1.0 
Main-Class: com.my.Main 
Class-Path: RXTXcomm.jar 

(пустая строка присутствует)

Когда я запускаю мою баночку as: java -jar my.jar

Я получаю: Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener

Что не так?

ответ

7

Что не так?

Вы упаковали зависимость банки в своей основной банке. Намерение Class-Path состоит в том, чтобы добавить внешнюю банку к пути к классам с указанием пути к расположению основной банки.

Упаковка контейнера в банке не поддерживается стандартными загрузчиками классов Java. Если вы хотите, вы можете взорвать внутреннюю банку в основную банку. Maven может сделать это за вас.

+0

Затем, как дать относительный путь зависимой банки, которая должна быть упакована в новую банку? –

+0

Простой ответ: вы не можете. Обходной путь может заключаться в том, чтобы упаковать их как Zip с зависимой флягой в подпапку. Затем вы можете добавить Class-Path: вложенную папку/RXTXcomm.jar в манифест основного контейнера. – Raza

1

RXTXcomm.jar не должен находиться внутри файла jar, но за его пределами. Прочитано the tutorial.

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