Рубрики
Без рубрики

Распространение настольных приложений JVM

Предыдущие публикации этой серии были посвящены различным платформам для разработки приложений на основе JVM…. Помеченный java, графический интерфейс, рабочий стол, открытый веб-запуск.

состояние-jvm-настольные платформы (серия из 6 частей)

Предыдущие публикации этой серии были посвящены различным платформам для разработки приложений на основе JVM.

Распространение приложений на нескольких компьютерах внутри одной компании не является проблемой. Доступно множество продуктов для автоматизации загрузки файлов на компьютеры. Проблемы могут возникнуть, когда вам потребуется координировать развертывание на разных физических сайтах.

Однако самая большая проблема заключается в том, что компьютеры не известны заранее: в этом случае невозможно нажать. По этой причине два десятилетия назад мы наблюдали переход от клиент-серверных архитектур к веб-архитектурам.

Оставшийся вопрос заключается в том, как развернуть настольное приложение Java. В этом посте мы рассмотрим некоторые варианты распространения такого рода приложений.

Апплеты

Хотя это не совсем касается настольных приложений, я считаю, что неплохо упомянуть апплеты в посте о распространении приложений Java.

Апплеты были первым способом сделать приложения Java доступными удаленно. Идея состояла в том, чтобы разместить на веб-сервере байт-код (один класс или JAR) и ссылаться на него в HTML-странице.




  
  
  

Обратите внимание, что апплет запускается на стороне клиента, поэтому требуется локальный JRE . Он также требует наличия плагина для браузера. И то, и другое – проблемы безопасности. Это приводит к тому, что поставщики браузеров удаляют поддержку плагинов, а команда Java, в свою очередь, отказывается от апплетов в Java 9.

В связи с тем, что современные поставщики браузеров работают над ограничением или уменьшением поддержки таких плагинов, как Flash, Silverlight и Java в своих продуктах, разработчикам приложений, которые полагаются на плагин браузера Java, необходимо рассмотреть альтернативные варианты. Разработчики Java, в настоящее время использующие плагины для браузеров, должны рассмотреть возможность перехода с Java-апплетов на технологию Java Web Start без плагинов.

Поддержка Java в браузерах возможна только до тех пор, пока поставщики браузеров привержены поддержке плагинов, основанных на стандартах. К концу 2015 года многие поставщики браузеров либо удалили, либо объявили о сроках удаления поддержки плагинов на основе стандартов, в то время как некоторые внедряют собственные API-интерфейсы расширений для браузеров. Следовательно, Oracle планирует отказаться от плагина браузера Java в JDK 9.

Устаревшая технология плагинов будет полностью удалена из Oracle Java Development Kit (JDK) и Java Runtime Environment (JRE) в будущем выпуске Java TBD. Приложения Java Web Start не зависят от плагина браузера и не будут затронуты этими изменениями.

https://www.oracle.com/technetwork/java/javase/migratingfromapplets-2872444.pdf

Открыть Веб-Запуск

После апплетов следующей альтернативой для распространения приложений Java является Java Web Start. Это канонический способ для настольных приложений. В качестве личного замечания, я использовал его более 15 лет назад с Java 1.4. Эта страница , похоже, подтверждает, что JDK 1.4.2 был первой версией, которая предоставляла его изначально, а не в качестве отдельной загрузки. Тем не менее, Oracle устарел Java Web Start в JDK 9 и удалил его в JDK 11.

Это оставило пользователей JAWS без какого-либо выбора. Карафун – компания, которая взяла на себя ответственность за проект. Он предоставляет его в виде отдельного пакета под названием Open Web Start , и программное обеспечение то же самое.

Для распространения приложения через Open Web Start, в дополнение к самой JAR, вам необходимо предоставить файл JNLP . Этот файл служит своего рода внешним дескриптором развертывания. Особенности JNLP являются довольно исчерпывающими:

  • Добавьте ярлык на рабочий стол пользователя
  • Может ли приложение работать в автономном режиме после того, как вы его загрузили
  • Политики обновления
  • Дополнительный список собственных библиотек
  • и т.д.

Полные спецификации по-прежнему доступны на сайте Oracle.

Давайте создадим JNLP для распространения нашего примера приложения Swing:



  
    File Renamer
    Nicolas Fränkel
    
  
  
    
    
         main="true" />                                                  
  
  
                                                      
  
   
  

  1. Путь к БАНКЕ
  2. Флаг, который помечает БАНКУ как содержащую основной класс
  3. Приложение переименования считывает и записывает файловую систему, для этого требуются разрешения. Обратите внимание, что предоставление разрешения не является мелкозернистым. Кроме того, разрешения требуют, чтобы вы подписали БАНКУ.
  4. Класс, содержащий точку входа (метод main )

пакет

Хотя Open Web Start больше не доступен как часть JDK, инструмент package доступен. Он включен с JDK 14. Как следует из его названия, пакет позволяет создать собственный установщик из JAR.

Его основное использование просто:

jpackage --input target --main-jar renamer-swing-1.0.jar    #1
  1. Предположим, что проект Maven, который генерирует JAR в целевой подпапке

На компьютере macOS приведенная выше команда создает Приложение для переименования Kt-1.0.dmg установщик. Он содержит приложение macOS со следующей структурой:

Структура включает в себя:

  • БАНКА
  • JRE – тот, который связан с командой package , создавшей установщик
  • файлы, специфичные для mac OS

В то время как образец JAR составляет 1,5 МБ, установщик занимает более 50 МБ из-за встроенной среды выполнения Java.

jлинк

jlink не является реальным механизмом распространения но я считаю, что это все еще заслуживает упоминания. Это позволяет вам создавать пользовательскую среду выполнения с выделенным сценарием запуска для ваших приложений. Это часть JDK начиная с Java 9.

Хотя теоретически он может работать с любым приложением , он сияет модульными приложениями. Такие приложения должны описывать модули, от которых они зависят, в module-info.java .

Основная задача – модульизировать приложение. Для нашего примера приложения/| module-info.java файл является:

module filerenamer.swing {
    requires eventbus;                            // 1 2
    requires java.desktop;                        // 1
    requires kotlin.stdlib;                       // 1
    exports ch.frankel.blog.renamer to eventbus;  // 3
}
  1. Объявлять зависимые модули
  2. Библиотека зеленых роботов – это безымянный модуль. Нам нужно ссылаться на него через название БАНКИ.
  3. Разрешите Greenrobot использовать наши классы

Модульизация приложения довольно проста. Но чтобы решить, войдет ли модуль JDK в конечную среду выполнения, jlink требует транзитивного анализа каждой зависимости приложения. Тем не менее, около 35 % библиотек не являются модульными и не объявляют Имя автоматического модуля в своем MANIFEST.MF .

Эту информацию можно добавить во время сборки, даже если процедура подвержена ошибкам и скучна. Описание того, как этого добиться, заслуживает отдельного поста. Для получения дополнительной информации, пожалуйста, ознакомьтесь с этой статьей журнала Oracle/|. Достаточно сказать здесь, что он активно использует плагин Mod it и т. Д. Maven .

После настройки POM упаковка приложения Renamer Swing дает папку, содержащую запускаемый сценарий запуска и необходимые модули из JDK.

Размер папки составляет около 86 МБ. Используя gzip , вы можете уменьшить размер архива примерно до 30 МБ, который вы можете распространять.

Обратите внимание, что для этого пользователям потребуется распаковать архив и знать, какой скрипт запускать.

Другие кандидаты

Вот некоторые другие кандидаты, которых я обнаружил, исследуя этот пост. Обратите внимание, что у меня нет опыта работы ни с одним из них, но это может быть полезно для некоторых из вас.

  • Oracle представила javapackager в Java 8. |/javapackager является предком пакета и теперь заменен последним.

    Средство Java Packager можно использовать для компиляции, упаковки, подписания и развертывания приложений Java и JavaFX из командной строки. Его можно использовать в качестве альтернативы задаче Ant или созданию приложений в среде IDE.

  • FX Launcher – это как средство запуска, так и средство автоматического обновления, которое фокусируется исключительно на приложениях JavaFX.

    FX Launcher выпущен под лицензией Apache 2.0.

  • Запуск4J :

    Launch4j – это кроссплатформенный инструмент для упаковки Java-приложений, распространяемых в виде банок, в облегченные собственные исполняемые файлы Windows. Исполняемый файл может быть настроен на поиск определенной версии JRE или использовать комплектную версию, и можно задать параметры среды выполнения, такие как начальный/максимальный размер кучи. Оболочка также обеспечивает лучший пользовательский интерфейс благодаря значку приложения, встроенному экрану-заставке до JRE и странице загрузки Java на случай, если соответствующий JRE не может быть найден.

    Launch4J выпущен под лицензией BSD с 3 пунктами, но с 2017 года не выпускался.

  • упаковка :

    Упаковывает вашу JAR, ресурсы и JVM для распространения в Windows, Linux и macOS, добавляя собственный исполняемый файл, чтобы он выглядел как собственное приложение. Пакет наиболее подходит для приложений с графическим интерфейсом, таких как игры, созданные с помощью libGDX.

    пакет выпущен под лицензией Apache 2.0.

  • Установить 4j :

    install4j – это мощный многоплатформенный конструктор установщиков Java, который создает собственные установщики и средства запуска приложений для приложений Java.

    install4J – это запатентованный продукт.

Вывод

В этом посте мы рассмотрели несколько вариантов распространения наших настольных приложений Java:

  • Открытый веб-запуск – это опция, основанная на прежнем веб-запуске Java. Пользователям необходимо установить программное обеспечение в свою систему, чтобы они могли выполнять файлы JNLP. Примечательные функции включают автоматическое обновление и автономный режим.
  • JDK включает в себя пакет . Это позволяет создавать установщики, которые оборачивают как банку, так и JRE.
  • ссылка также включена в JDK. Вместо создания установщиков он создает пользовательские дистрибутивы, которые вам нужно упаковать самостоятельно.

Чтобы идти дальше:

Первоначально опубликовано на Помешанный на Java 14 февраля th 2021

состояние-jvm-настольные платформы (серия из 6 частей)

Оригинал: “https://dev.to/nfrankel/distribution-of-jvm-desktop-applications-31n8”