Пакетное приложение JavaFX с openjdk 11 + время выполнения - PullRequest
0 голосов
/ 24 октября 2018

Прочитав, что OpenJDK 11 будет поддерживаться в течение длительного времени, я решил создать небольшое приложение (используя Gradle) для тестирования нескольких вещей в сочетании с JavaFX.После некоторой борьбы мне удалось создать файл Hello World .jar, который открывается нормально.

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

Поиск по связыванию приложения OpenJDK 11 с JRE Java 11 не возвращает много ответов.Я нахожу это любопытным, потому что (насколько я понимаю) OpenJDK 11 является первым, который не поставляется с включенной JRE.

Итак, мой вопрос: Как я могу отправить свое приложение Java 11 с объединенной средой выполнения?

Ответы [ 4 ]

0 голосов
/ 18 февраля 2019

Модульная Java, jlink , & jpackage

Следуйте этим учебникам , найденным в новом доме для JavaFX после того, как был выдвинут Oracle на Gluon .

Вам нужно будет написать код с использованием модульной Java.Добавьте JavaFX 11 в качестве зависимости к вашему проекту.И используйте новые инструменты компоновки / упаковки для объединения подмножества JDK в ваше приложение.

Подробнее о:

Не более JRE

Oracle noбольше предназначается для конечных пользователей, чтобы установить JRE или JDK. Java-апплеты в браузере и Java Web Start доставка приложений прекращается, и конечному пользователю не требуется JRE.Ожидается, что приложения на основе Java будут включать собственную реализацию Java.Единственными, кто сознательно устанавливает JDK, будут разработчики и системные администраторы на стороне сервера.

Важно:

Вот блок-схема, которая может помочь вам найти и принять решение среди различных поставщиков, предоставляющих реализацию Java 11.

Flowchart diagram to aid in finding and choosing an implementation of Java 11 from various vendors.

0 голосов
/ 24 октября 2018

Вы можете связать весь JDK со своим приложением и создать пакетный скрипт для запуска своего приложения, используя связанный JDK.Я знаю, что этот подход значительно увеличит ваш выпуск, но альтернатива состоит в том, чтобы попросить пользователя установить JDK самостоятельно, что нетривиально для людей, не разбирающихся в технологиях.Или вы можете выпустить обе версии, одну с JDK в комплекте и одну без.

0 голосов
/ 31 января 2019

Собственные библиотеки

Проблема, с которой я столкнулся, состояла в том, чтобы сообщить JavaFX о своих собственных собственных библиотеках (.dll, .dylib, .so и т. Д.).К счастью, загрузить dylibs так же просто, как установить java.library.path с помощью System.setProperty(...).

Исторически установка этой переменной считается бессмысленной в Java, поскольку для загрузчика классов это слишком поздно (уступает -Djava.library.path) и принудительное использование рефлексии является запрещенным нарушением безопасности, поскольку Java 10 ... к счастью, JavaFX фактически учитывает эту переменную естественным образом без каких-либо нарушений или взломов и подхватит ее послеон установлен.

// Detect the path to the currently running jar
String jarPath = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()).getCanonicalPath();

// Fix characters that get URL encoded when calling getPath()
jarPath = URLDecoder.decode(jarPath, "UTF-8");

String parentFolder = new File(jarPath).getParent();

// If libglass.dylib is next to the jar in a folder called "/bin"
System.setProperty("java.library.path",  parentFolder + "/bin");

// ... then make any javafx calls

Библиотеки Java

Естественно, файлы .jar также должны быть доступны.Я делаю это так же, как и любой java-пакет, архивируя их в дистрибутив (делая один большой .jar файл)

Эти .jar файлы должны соответствовать всемJavaFX 11 распространяется и должен быть соответствующим образом упакован.

javafx-swt.jar
javafx.base.jar
javafx.controls.jar
javafx.fxml.jar
javafx.graphics.jar
javafx.media.jar
javafx.swing.jar
javafx.web.jar

Совместимость с Java 8

Первоначальные тесты на Java 8 с использованием описанной выше техники являются положительными.На данный момент я использую определение версии Java (не включено в приведенный выше пример) и ТОЛЬКО параметр java.library.path для Java 11 или выше.Java 8 - это EOL для личного использования, декабрь 2019 года (EOL для коммерческого использования, январь 2019 года), поэтому важно обеспечить совместимость при переходе клиентов с одного выпуска LTS на другой.

0 голосов
/ 24 октября 2018

Может быть, вы просто немного подождете, пока не выйдет первая версия EA нового инструмента jpackager.Смотри http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-October/056186.html

...