создайте исполняемое приложение JAVA Standalone для запуска на разных платформах без установки - PullRequest
0 голосов
/ 25 января 2019

Я создал образ времени выполнения для своего Java-приложения, используя jlink, и я хотел бы иметь возможность отправлять мое приложение как исполняемый файл на разные платформы.

В идеале, это может быть один файл, который пользователь может дважды щелкнуть и запустить приложение без необходимости что-либо устанавливать.

Есть ли сейчас хороший способ сделать это?

Ответы [ 3 ]

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

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

jlink статически связывает «требуемые модули и их транзитивные зависимости» с выводом.

Нет кросс-платформенного решения этой проблемы.

Невероятно (или, иначе говоря, невозможно) включить все платформы в один файл, поскольку каждый тип исполняемых файлов (COFF, ELF ...) имеет свою структуру. Вы можете попытаться использовать универсальный пакетный файл для запуска подходящего исполняемого файла, но в Windows это потребует кодировки типа текстового файла; таким образом отравляя оставшийся двоичный код.

Используя jlink и , новый формат файла jmod позволит вам хранить собственный код в контейнере Java и, таким образом, разрешить точку входа во встроенный собственный код JRE в одном исполняемом образе для одна предопределенная платформа.

Другая сторона этой проблемы - последствия для безопасности. Поскольку встроенная JRE не подлежит обновлениям для системы безопасности, взломщики могут решить встроить ранее известную уязвимую версию JRE, тем самым предоставляя исправленные эксплойты неосведомленным потребителям.

Ожидаемый ответ от антивирусных программ - пометить все не обновленные встроенные JRE как вирусы.

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

Также посмотрите на SubstrateVM .Это не настоящая Java, однако в некоторых случаях она может помочь вам, например, в простых приложениях командной строки.

Substrate VM - это инфраструктура, которая позволяет выполнять предварительную (AOT) компиляцию приложений Javaв предположении замкнутого мира в виде исполняемых образов или общих объектов (ELF-64 или 64-битный Mach-O).

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

Вы можете сделать установщик, который установит JDK и приложение. Сделайте приложение exe, используя что-то вроде Launch4j и для исполняемого файла Mac, следуйте этому руководству Oracle: Упаковка приложения Java для распространения на Mac и, наконец: Для Linux

Minecraft использует этот метод, и, насколько я знаю, я не знаю другого способа.

Если вы хотите создать переносимое приложение типа «сделай один раз где-нибудь», тогда я бы предложил попробовать другой язык программирования, например C #, для которого также требуется .NET JVM, но он встроен в системы Windows.

...