Как связать и запустить собственное приложение для Mac / Windows с Java 11?

К сожалению, инструмент javapackager будет удален с JDK 11, поскольку он является частью JavaFX, который также будет удален. Следовательно, больше не будет «официального» и простого способа создания пакетов приложений Java для Mac или Windows.

Я попытался повторно использовать собственные файлы запуска, сгенерированные javapackager Java 9/10 (на Mac: my.app/Contents/MacOS/my), и они, похоже, все еще работают с JDK 11. Однако это немного грязное решение. Есть идеи о том, как изначально упаковывать и запускать приложения с Java 11 и выше (предпочтительна платформа Mac)?


person Michael    schedule 14.09.2018    source источник
comment
Предлагается новый инструмент, чтобы восполнить этот пробел: bugs.openjdk.java.net/browse/ JDK-8200758, но он еще не нацелен на конкретный выпуск.   -  person Jorn Vernee    schedule 14.09.2018
comment
Да, я уже видел этот JEP. Так что необходимость вроде есть, но нет надежды на быструю реализацию. И также не уверен, что вы сможете использовать упаковщик / сборщик OpenJDK для сборки Oracle JDK.   -  person Michael    schedule 14.09.2018
comment
Начиная с JDK14, теперь вы можете использовать jpackage, как показано здесь: stackoverflow.com/a/66511673/191246 (хотя все еще инкубирует)   -  person ccpizza    schedule 07.03.2021


Ответы (2)


Вы можете использовать jlink, которая объединит ваши модули в настраиваемый образ времени выполнения. Это немного отличается от javapackager, требуя, чтобы вы использовали модули для правильной работы. Вы можете заставить его работать без модулей, если вы вручную укажете все необходимые модули из JRE.

person apetranzilla    schedule 14.09.2018
comment
Привет! Я уже использую jlink для создания индивидуальной, как можно меньшего размера JRE. Однако jlink не создает собственный файл запуска. У него есть опция запуска, но это просто создает сценарий оболочки, который не ведет себя как собственное приложение Mac (например, неправильный значок в Dock). Однако javapackager создает собственный файл запуска, который запускает связанную виртуальную машину с помощью собственного кода. - person Michael; 14.09.2018
comment
Ах я вижу. Разве приложения OSX не являются специальными zip-файлами? Если да, то разве не легко написать сценарий, который объединяет необходимые файлы и устанавливает значок и тому подобное? - person apetranzilla; 15.09.2018
comment
Вы в принципе правы. Эти пакеты .app представляют собой не zip-архивы, а просто специальные структуры каталогов. Его действительно легко создать вручную. Однако решающим моментом является программа launcher, которая должна быть собственной программой и запускать виртуальную машину и основной класс. - person Michael; 15.09.2018
comment
Если вы любите приключения, вам не составит труда написать базовую программу на C, которая запускает ваш jar-файл, или, возможно, даже использовать GraalVM native-image инструмент для компиляции jar-файла в двоичный файл ELF? - person apetranzilla; 15.09.2018

Как прокомментировал ccpizza выше:

Начиная с JDK14, теперь вы можете использовать jpackage, как показано здесь: stackoverflow.com/a/66511673/191246 (хотя все еще инкубируется) - ccpizza

person Michael    schedule 08.03.2021