У чому різниця між варіантами обробки бібліотеки jar, що працює?


79

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

  • Витяг необхідних бібліотек у JAR
  • Пакуйте необхідні бібліотеки в JAR
  • Скопіюйте необхідні бібліотеки у підпапку поруч із JAR.

Що таке відмінності і як вони вплинуть на мій файл .jnlp?

Якщо це одна баночка, чи не простіше, тому що мені не потрібно було б писати всі різні шляхи до всіх бібліотек, які вона використовує?

Якщо зміни відбудуться як у бібліотеці, так і в програмі, найкраще рішення буде одна баночка? Або мені знадобляться <jar href=''>кожні окремі бібліотеки?

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

Відповіді:


142
  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, що містить код вашої програми та весь код бібліотеки.


Цікаво, а що просто створити банку, яку не можна запускати? є якась різниця?
KJW

10
@KimJongWoo Ви можете "виконувати" такі JAR, що запускаються, java -jar myjar.jarоскільки JAR визначає розташування main()методу у своєму файлі "META-INF / MANIFEST.MF". Параметр "Основний клас" усередині цього файлу визначає клас, який має main()метод. "Звичайні" JAR, як правило, не мають цього налаштування, тому ви не можете "виконувати" їх однаково.
Майкл

1
@Michael, Ну для розгортання автономних програм (без оновлення версії), чи не буде варіант 1 очевидним вибором? Це також здається рішенням для найменшого гнізда і коштує найменших байтів, чи не так?
Pacerier

1
Баночка з екстрактом швидша за упаковку ?? У швидкості завантаження та виконання
Розробник66

1
@ Developer66 Я припускаю, що будь-які відмінності в продуктивності незначні.
Майкл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.