В чем разница между управляемыми опциями обработки jar-библиотек? - PullRequest
75 голосов
/ 29 ноября 2011

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

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

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

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

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

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

1 Ответ

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

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

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

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

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

...