Как мне перейти на jlink (JDK 9+) из Java Web Start (JDK 8) для приложения для автоматического обновления?

В Java 8 и предыдущих версиях есть Java Web Start, который автоматически обновляет приложение при его изменении. Oracle рекомендовала пользователям перейти на jlink, так как это новая технология Oracle. Пока это звучит хорошо. Это связано с множеством преимуществ:

  1. Родительский код для Windows, Mac и Linux
  2. Модуляция кода (хотя Proguard также делает это)
  3. Использование новых поддерживаемых технологий.

Проблема: я не могу найти каноническое решение Java для автоматического обновления с помощью jlink.

Можно подумать, что Java Web Start можно продолжать использовать, особенно если он случайно читает этот документ. Обратите внимание на то, что Java Web Start по-прежнему остается в списке. Но есть муха в мазке: Oracle обесценивает Java Web Start. Он намечен для удаления в JDK 11. Итак, каков официальный путь вперед. Если это не так, есть ли стандартный способ, которым люди идут?

Для целей этого вопроса следующие пределы:

  • Ежегодно выплачивать огромные суммы денег кому-то с функциональным решением предприятия. Приложение, которое будет распространено, уже упаковано в одну банку, размер которой меньше 50 МБ.
  • Заставляет пользователей запускать приложение стиля InstallShield для переустановки новой версии, а затем вручную удалять старую версию каждый раз при нажатии на обновление. Это так 1990-х.
  • Перенос всего приложения в webapp, переписывание логики пользовательского интерфейса и клиентской стороны для размещения в браузере и решения всех несовместимостей, которые влекут за собой. Авторы приложения работали над GWT и точно знали, на что способны веб-браузеры. К сожалению, они также знают уровень требуемых усилий.
  • Предоставление пользователям возможности запуска старых версий приложения. То же самое относится к 1980 году. Быстрое обновление современных приложений и поддержка каждой версии приложения, когда-либо выпущенного, не поддаются проверке. То, к чему обращалось приложение моего отца COBOL, и ему это не понравилось. Я надеюсь, что технология прогрессирует.
  • Продолжение использования Java Web Start. До тех пор, пока Oracle не передумает, Java Web Start - это обреченная технология.

Ответ 1

Будущий javapackager (jpackage) может оказать некоторую помощь (https://openjdk.java.net/jeps/343). Было указано, что есть "опция для указания правил обновления для устанавливаемых пакетов (например, в rpm/deb)".... не уверен, что это намекает на рабочий стол Windows.

Ответ 2

У меня была похожая проблема в прошлом проекте. Нам нужно было перейти с Webstart на другую технологию.

Первым подходом была установка IcedTea. Он напрямую связан с проектом AdoptOpenJDK.

Но насколько я понял проблему, Java больше не предназначалась для такой установки на стороне Клиента, и мы не хотели проблем со всеми нашими клиентами.

Тогда нашим решением было создание собственного конкретного исполняемого файла, который подключается к серверу, запрашивает параметры среды со стороны сервера, а затем загружает и извлекает JLink Java. Таким образом, мы могли бы использовать старые технологии и просто обернуть их в исполняемый файл.

Последнее, что было сделано, - это перенаправление к месту загрузки исполняемого файла при вызове jnlp-URL.

Ответ 3

Вы используете Maven?

Я решил похожую проблему с Maven (мне нужно обновить EAR).

Мое основное приложение (пакет ear) содержит файл pom.xml со списком зависимостей и репозиториев.

У зависимостей есть тег <version> с диапазоном (документация), как в этом примере

<version>[1.0.0,)</version>

Это значит: получить версию 1.0.0 или новее зависимости. (Вы также можете установить верхнюю границу для версии, [1.0.0, 2.0.0), так что если вы разрабатываете новую версию, она не используется в старом приложении)

В разделе репозитория я добавил свой личный репозиторий.

Теперь на удаленной машине мне нужно только пересобрать мой пакет ear с помощью maven: компилятор загрузил более новую версию моего jar и соединил ее.

Вам нужна система, чтобы проверить, есть ли более новая версия зависимостей, и предупредить пользователя об обновлении приложения, а также заблокировать его работу (вы не можете работать, если вы не обновляете). Возможно, вам нужно небольшое приложение, чтобы пользователи могли легко выполнить процесс восстановления. Это был 1990 год, но многие настольные приложения работают именно так

PRO

  • Эта схема может быть использована во многих различных проектах.

CONTRO

  • Вам необходимо собрать приложение на удаленном компьютере, поэтому у клиента должен быть JDK и доступ к вашему хранилищу (например, к артефакту);

  • Вы должны написать код в разных jar файлах и добавить их как зависимости в основной архив.

  • Вы должны каждый раз менять версию JAR и публиковать в репозитории (это может быть хорошей практикой)

Ответ 4

Некоторое время назад я прокомментировал, чтобы посмотреть проект OpenWebStart.

Теперь я думаю, что пришло время серьезно подумать. Хотя функция еще не завершена, альфа-версия OpenWebStart теперь доступна для загрузки под лицензией "GPL с исключением Classpath".

Страница OpenaebStart Технические подробности гласит:

OpenWebStart основан на Iced-Tea-Web и спецификации JNLP, определенной в JSR-56. Он будет реализовывать наиболее часто используемые функции Java Web Start и сможет обрабатывать любые типичные приложения на основе JWS. Мы планируем поддерживать все будущие версии Java, начиная с Java 11. Помимо Java 11, первый выпуск OpenWebStart также будет поддерживать Java 8.

Далее на странице указывается, что OpenWebStart будет поддерживать интерактивные установщики с автоматическим обновлением и неинтерактивные установщики. Некоторые функции JNLP будут поддерживаться, и это будет включать замену для Панели управления Java. Более полный список запланированных функций 1 и их статус реализации представлен в таблице функций.


1 - If you have a requirement that is not on their feature list (e.g. jlink support), you could contact the OpenWebStart team, and offer a suitable incentive (e.g. money to pay developers) to implement the feature for you.


Disclaimer: I have no connection with the OpenWebStart project, the company (Karakun) or the project sponsors. This is not a recommendation.