Який найкращий спосіб розповсюдження програм Java? [зачинено]


115

Java - одна з моїх мов програмування на вибір. Я завжди стикаюся з проблемою, хоча розповсюджую свою програму кінцевим користувачам.

Надання користувачу JAR не завжди є таким зручним для користувачів, як я хотів би, а використання Java WebStart вимагає, щоб я підтримував веб-сервер.

Який найкращий спосіб розповсюдження програми Java? Що робити, якщо додатку Java потрібно встановити артефакти на комп'ютер користувача? Чи є якісь гарні системи встановлення / упаковки Java там?


Java WebStart можна використовувати з будь-якої URL-адреси, наприклад, з файловою системою, як-от компакт-диск або мережевий диск. Зрозуміло, це не дає вам стільки. Примітка: eclipse не використовує інсталятор, ви просто розпакуйте його та запустіть. Можливо, вам не потрібен інсталятор.
Пітер Лорі

1
В наші дні дуже просто розгорнути таку програму Java WebStart, наприклад, Google Application Engine.
Thorbjørn Ravn Andersen

6
Прикро, що це питання закрите. Я не погоджуюся з причиною, вказаною "як насамперед на основі думки". Надані відповіді базуються не на думці, а на досвіді. Я завжди вітаю гарні відповіді на основі досвіду. Ті, хто не може навчитися історії, приречені повторити її.
bouvierr

Ви можете використовувати jlink (представлений разом з JDK 9) для розповсюдження Java Apps. Він поставляється з JDK. Він створить для вас спеціальний JRE. Вам не потрібно встановлювати Java на клієнтські машини.
blueray

Відповіді:


89

Існує різноманітність рішень, залежно від ваших потреб у розповсюдженні.

  1. Просто використовуйте банку. Це передбачає, що у користувача встановлена ​​правильна версія Java, інакше користувач отримає винятки "версія формату файлу". Це добре для внутрішнього розповсюдження всередині компанії.

  2. Використовуйте запуск4j та інсталятор типу NSIS. Це дає вам набагато більший контроль, хоча користувач все ще може робити такі дурні речі, як видалення часу виконання Java. Це, мабуть, найпопулярніший підхід, і який я зараз використовую.

  3. Використовуйте Webstart. Це також передбачає, що у користувача встановлена ​​правильна версія Java, але це набагато простіше розпочати. Мій досвід полягає в тому, що це добре для жорстко контрольованих інтранет-середовищ, але це стає болем при більшіх розгортаннях, оскільки це має багато дивних збоїв. Можливо, покращиться нова технологія плагінів у Java 1.7.

  4. Використовуйте компілятор з нативного коду, як Excelsior JET, і розповсюджуйте його як виконуваний файл або загортайте його в інсталятор. Дорогий, і він, як правило, пов'язує вас з трохи старшою версією Java, і є деякий біль при динамічному завантаженні класу, але він дуже ефективний для масштабного розгортання, де вам потрібно мінімізувати ваші проблеми з підтримкою.


4
Лише зауваження про Webstart: Поки у користувача встановлена ​​версія Java, яка не з кам'яного віку (наприклад, 1.2), веб-стартам можна сказати завантажити та встановити нову версію Java, потрібну для вашої програми. поки що. Подивіться на синтаксис файлу .jnlp. Звичайно, це все ще досить помітно показує, що ви використовуєте Java, що може бути невідповідним залежно від клієнтів, з якими ви маєте справу. У цих випадках вам справді слід надати якийсь "рідний" формат інсталятора / файлу та заховати деталі реалізації якомога далі.
Даніель Шнеллер

10
Мені не подобається Webstart. У ньому занадто багато брендингу Java / Sun. Важко змусити його правильно працювати. Налаштування підпису коду - більше клопоту, ніж варто, і користувач все одно не розуміє переваги безпеки та повідомлення. Якщо ви хочете зробити що-небудь в системі користувачів, вам доведеться заплатити за сертифікат підпису коду, щоб позбутися страхітливих попереджень. Це робить багато складних кешування, які можуть спричинити проблеми. Можливо, OSGi або майбутні модулі Java запропонують подібні переваги автоматичного оновлення. Я використовую варіацію №2 і створюю DMG / Packager для mac all з Ant.
Cal

Я використовував NSIS, як ви запропонували. Я також подивився на start4j. Чому ви рекомендуєте використовувати обидва?
Джекнад

1
@JackN NSIS - це генератор установки. Launch4j спеціально для полегшення запуску / запуску програм Java. У їх функціональності є певне збіг, але вони націлені на різні частини проблеми.
Ноель Грандін

+1 чудова відповідь. Чи маєте ви досвід роботи з Excelsior JET? Він підтримує лише архітектуру x86 і не може завантажити бібліотеку jar в реальному часі?
KJW

6

просунутий інсталятор дозволяє легко упаковувати Java-програми у вигляді виконуваних файлів Windows, і він досить гнучкий у способі налаштування. Я виявив, що для поширення програм Java на клієнтів Windows, це найпростіший спосіб.


5

JSmooth - це проста програма, яка бере вашу банку і загортає її у стандартний виконуваний файл Windows. Він постачається з простим графічним інтерфейсом, який дозволяє налаштувати необхідний JVM, поєднати його з додатком або надати можливість завантажити його, якщо він ще не встановлений. Ви можете надіслати файл exe таким, який є, або скопіювати його з можливими залежностями (або дозволити програмі завантажувати додаткові залежності з мережі при запуску). Це також безкоштовно, як у пиві та промові, що може (або не може) бути хорошою справою.


4

Це залежить від того, наскільки складні ваші цільові користувачі. У більшості випадків ви хочете ізолювати їх від того, що ви запускаєте додаток на базі Java. Дайте їм власний інсталятор, який робить все правильно (створюйте записи в меню запуску, пускові установки, реєструйтесь з програмами для додавання / видалення тощо) і вже поєднує програму виконання Java (щоб користувачеві не потрібно було це знати і не турбуватись). Я хотів би запропонувати наш інструмент для встановлення крос-платформ, BitRock InstallBuilder. Хоча він не базується на Java, він зазвичай використовується для упаковки програм Java. Його можна легко інтегрувати з Ant і ви можете створювати інсталятори Windows з Unix / Linux / Mac та навпаки. Оскільки згенеровані інсталятори є рідними, їм не потрібен крок самовитягування або JRE, щоб вони вже були присутніми в цільовій системі, а це означає, що менші інсталятори та заощадять вам певні головні болі. Я також хотів би зазначити, що у нас є безкоштовні ліцензії на проекти з відкритим кодом


3

Виконані файли найкращі, але вони обмежені платформою, тобто використовувати gcj: http://gcc.gnu.org/java/ для Linux для створення виконуваних файлів та використання start4j: http://launch4j.sourceforge.net/ для створення виконавчих файлів Windows. Для упаковки на Linux ви можете використовувати будь-який rpm або deb pack. Для win32 спробуйте http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System


3

Якщо це справжній GUI-додаток для кінцевого користувача, ви повинні ігнорувати ланагуг, у якому ви написали програму (Java), та використовувати нативний інсталятор для кожної обраної вами платформи. Люди з Mac хочуть встановити .dmg, а на Windows - .msi або .exe - це інсталятор. У Windows я віддаю перевагу NSIS від NullSoft лише тому, що це менш заперечно, ніж InstallShield або InstallAnywhere. На OSX ви можете розраховувати на те, що JVM вже є. У Windows вам потрібно буде перевірити та встановити їх, якщо це необхідно. Люди з Linux не запускають додатки Java GUI, і мало хто з них буде знати, що робити з виконуваним файлом .jar.


3
справді? Люди з Linux не запускатимуть додатки gui? тоді я здогадуюсь, що його програма марна для них, що робить весь дискусійний спір.
Метт

@Matt, чому ви вважаєте, що оригінальна програма була програмою GUI? Я встановив багато програм Java на командний рядок в Linux, і ті, які діють як .deb або .rpms, особливо цінуються.
Bra4 Ry4an Brase

1
Оригінальна назва вказала GUI. Крім того, якщо веб-старт був піднятий, це гарно, що це програма gui. Нарешті, сказати, що користувачі Linux не використовують додатки GUI - це абсолютно неправда.
Метт

Я не сказав, що Linux не запускає програми GUI. Я сказав, що вони не запускатимуть додатки "Java GUI", і за межами NetBeans та Eclipse (які я висвітлював під "мало хто, що знатиме, що робити з виконуваною банку"), я не можу придумати жодного широко використовуваного Додаток Java на Linux (Open Office тощо) є C ++ і використовує Java лише для плагінів).
Bra4 Ry4an Brase

коли-небудь чув про SQLDeveloper? Або будь-який із інструментів управління oracle? Усі закодовані в Java (хоча sqldeveloper закінчується в комплекті як .exe, але це java)
Метт,

3

Хоча я ще не використовував NSIS (Nullsoft Scriptable Installer System), є сценарії встановлення, які перевірять, встановлений чи потрібний JRE в цільовій системі.

Багато зразків скриптів доступні на сторінках Приклади коду та установців реального світу , таких як:

(Зверніть увагу, що я фактично не використовував жоден із сценаріїв, тому, будь ласка, не сприймайте це як схвалення.)


2

Мені потрібен був спосіб упаковки свого проекту та його залежностей в один файл jar.

Я знайшов те, що мені потрібно, використовуючи плагін Maven2 Assembly : плагін Maven2 Assembly

Здається, це дублює функціональність однієї банки , але не потребує додаткової конфігурації для її роботи.


1

Для простих програм Java я люблю використовувати Jar's. Дуже просто розподілити один файл, на який користувач може просто натиснути (Windows) або

java -jar jarname.jar

IMHO, jar - це шлях, коли простота є головною вимогою.


Спробуйте це для новачків, і ви побачите, що це не буде добре.
роді

1

Я розробляю RCP програми затемнення. Зазвичай для запуску програми затемнення включається виконуваний пусковий механізм. Я включаю віртуальну машину java всередині папки додатків у підкаталозі / jre, щоб гарантувати, що буде використана правильна версія Java.

Потім ми пакуємо з Inno Setup для встановлення на машині користувача.


1

Який найкращий спосіб розповсюдження програми Java? Що робити, якщо додатку Java потрібно встановити артефакти на комп'ютер користувача? Чи є якісь гарні системи встановлення / упаковки Java там?

На мій досвід ( оцінюючи ряд варіантів ), install4j - це хороше рішення. Він створює власні інсталятори для будь-якої платформи та спеціально орієнтований на встановлення Java-додатків. Докладніше див. " Особливості " на його веб-сайті.

insta4j, хоча комерційний інструмент. Особливо, якщо ваші потреби відносно прості (просто розподіліть додаток і встановіть деякі артефакти), існує багато інших хороших варіантів, включаючи безкоштовні (наприклад, izPack або вже згаданий Lauch4j ). Але ви попросили найкращого способу, і на сьогоднішній день я знаю, що install4j - це один, особливо для розповсюдження великих або більш складних додатків Java (EE).


Чи знаєте ви, як змусити його запустити JVM 5.0 на Mac OS? За допомогою Windows ви просто з'єднуєте JRE, але на mac можливо, у них інший JVM налаштований за замовчуванням. Тож я не впевнений, як явно змусити його використовувати конкретну версію JVM, яку ви хочете ...
Стефан Греньє

@Stephane, я фактично не створив інсталяторів OS X, використовуючи install4j, але я думаю, це не повинно бути проблемою, враховуючи гнучкі параметри пакетування / виявлення JRE. Щоб дізнатися більше про них, перегляньте посилання у цій відповіді: stackoverflow.com/questions/995881/…
Jonik

Оскільки Mac підтримує створення пакетів додатків Java, ви можете просто вказати JRE в такому списку info.plist ... <key> JVMVersion </key> <string> 1.5+ </string> Ви можете видалити плюс, щоб вимагати певної версії . Так я це роблю, але не використовую install4j. Існує купа сторінок, що пояснюють створення бутонів Mac App в Інтернеті. Я також рекомендую просто подивитися, як це роблять limewire або vuze (програми java). Ви також можете переглянути сценарії збірки, які вони використовують для створення пакетів програм та dmg-файлів, оскільки вони є відкритим кодом!
Cal

0

Найкраща відповідь залежить від платформи. Для розгортання в Windows я мав непогані результати, використовуючи комбінацію одного jar і start4j . Минуло трохи часу, щоб правильно налаштувати моє середовище побудови (сценарії мурашок, в основному), але зараз це досить безболісно.


0

Ну, з моєї точки зору, найкращим механізмом розповсюдження є використання чогось типу ClickOnce або WebStart технології . Ви просто розгортаєте версію на сервері, і вона автоматично надходить клієнтам, коли версія виходить. Також платформа Eclipse RCP містить UpdateManager, який робить те, що робить WebStart, але також набагато більше.

Оскільки я використовую Maven2 для побудови, розгортання - це лише шматок пирога: скопіюйте вбудовану банку на місце на сервері, оновіть файл jnlp, якщо потрібно, і ви закінчите.


0

instalanywhere хороший, але дорогий - я не знайшов (як) хорошого безкоштовного


Перегляньте це для альтернатив InstallAnywhere, включаючи деякі безкоштовні (а також комерційні, що мають значно більш низькі ціни): stackoverflow.com/questions/759855/…
Jonik

-2

Я б поштовував файл jar разом з іншими залежними банками, файлами конфігурації та документацією разом із run.bat / run.sh. Кінцевий користувач повинен мати можливість розпакувати його до будь-якого місця та відредагувати run.bat, якщо це потрібно (він повинен працювати без редагування у більшості випадків). Інсталятор може бути корисним, якщо ви хочете створити записи в меню "Пуск", настільному ПК, системному треї тощо.

Як користувач, я віддаю перевагу розпакуванню та запуску виду встановлення (будь-які записи меню пуску, будь ласка). Однак люди, які не входять до ІТ-індустрії, можуть мати різні переваги. Тож якщо програма значною мірою орієнтована на розробників маршруту zip-run.bat, а додатки для широкої громадськості можуть бути встановлені за допомогою інсталятора.


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