Получение Java-апплета для поиска библиотек jar, встроенных в один файл jar - PullRequest
0 голосов
/ 17 февраля 2011

У меня возникли проблемы с получением моего Java-апплета, который использует встроенные библиотеки jar для работы на веб-странице. В частности, я получаю NoClassDefFoundError для классов, которые содержатся в библиотеках, упакованных в файлы jar, которые сами содержатся в одном файле jar моего апплета. Обычные классы последних (т. Е. Те, которые не содержатся во вложенных jar-файлах) без проблем размещаются средством запуска Applet.

Вот мой HTML-код:

<applet code="Applet.class" archive="myApplet.jar" width="600" height="600" title="MyApplet">

Скажем, внутри MyApplet.jar есть еще два jar-файла: library1.jar и library2.jar на корневом уровне. Как сделать их доступными, чтобы программа запуска могла их найти? Я попытался добавить library1.jar и library2.jar к атрибуту архива, но это не сработало.

Ответы [ 3 ]

1 голос
/ 18 февраля 2011

Вы можете разархивировать файлы из ваших файлов зависимостей и включить их в свой файл. Скажем, у вас есть корзина, src и libs dir.

cd bin
find ../libs -type f -name \*.jar -exec jar xfv {} \;
rm -rf bin/META-INF
cd ..
jar cfv yourjar.jar -C bin/ .
0 голосов
/ 17 февраля 2011

Вы можете использовать плагин maven shade для создания одного баночка, содержащего все.

0 голосов
/ 17 февраля 2011

Java напрямую не поддерживает файлы JAR внутри других файлов JAR.

Вам потребуется специальный загрузчик классов, который знает, как с ними работать.Проект one-jar предоставляет такой загрузчик классов и может работать с ant.Если вы используете Eclipse, в банке Export -> Runnable есть опция для создания одной банки непосредственно с загрузчиком классов one-jar.

Обратите внимание, что использование памяти будет выше, поскольку загрузчик классов должен кэшировать больше информации.

...