В чем разница между вариантами обработки библиотеки runnable jar?

Итак, я буду использовать Java Web Start для развертывания java-приложения. При экспорте в Runnable Jar в eclipse Helios есть три параметра.

  • Извлечение необходимых библиотек в JAR
  • Необходимые для пакета библиотеки в JAR
  • Скопируйте необходимые библиотеки в подпапку рядом с JAR.

В чем отличия, и как они повлияют на мой .jnlp файл?

Если это одна банка, не так ли проще, потому что мне не нужно будет писать все разные пути ко всем библиотекам, которые она использует?

Если есть изменения как в библиотеке, так и в приложении, одна банка будет лучшим решением? Или мне нужно <jar href=''> для каждой отдельной библиотеки?

Также обратите внимание, что мне нужно использовать собственные библиотеки, например .dll и .so.

Ответ 1

  • Извлечение необходимых библиотек в JAR. Извлекает фактические файлы .class из библиотек, которые использует ваше приложение, и помещает эти .class файлы в исполняемый JAR. Таким образом, исполняемый JAR будет содержать не только файлы .class вашего приложения, но также файлы .class всех библиотек, которые использует ваше приложение.

  • Необходимые библиотеки пакетов в JAR. Помещает фактические JAR файлы библиотек в ваш исполняемый JAR. Как правило, JAR файл в JAR файле не может быть загружен JVM. Но Eclipse добавляет специальные классы в runnable JAR, чтобы сделать это возможным.

  • Копирование необходимых библиотек в подпапку рядом с JAR. Сохраняет JAR файлы библиотеки полностью отдельно от исполняемого JAR, поэтому исполняемый JAR будет содержать только файлы .class вашего приложения.

Вариант № 2 удобен, поскольку он аккуратно упаковывает все в один JAR и сохраняет JAR-библиотеки библиотеки отдельно от файлов приложения .class.

Однако недостаток в упаковке всего внутри одного JAR (опции №1 и №2) заключается в том, что при обновлении приложения пользователь должен будет загрузить больше данных для обновления приложения. Если JAR сохраняются отдельно, пользователю нужно будет только загрузить JAR, который содержит ваш код приложения, а не один массивный JAR, содержащий код приложения и весь код библиотеки.