Как можно распространять настольную Java-игру без зависимости от времени выполнения Java?

9

Можно ли превратить приложение Java в автономный пакет, который запускается «из коробки»? Конечный пользователь не должен устанавливать какую-либо Java JRE, а установщик не должен содержать JRE и устанавливать его для пользователя.

Конечный дистрибутив должен содержать собственный исполняемый файл (возможно, по одному для каждой из Windows, Mac и Linux), а также обычные файлы данных и любые дополнительные JAR-файлы, если это необходимо. Я специально не ищу решение «один файл» - мне бы хотелось, чтобы файлы данных были беспрепятственными.

Как это может быть сделано?

leokhorn
источник

Ответы:

8

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

Вы можете использовать исходный / байт-код Java для компиляторов машинного кода. Есть Excelsior JET для Windows и Linux (требуется лицензия) и GNU Compiler для Java, который является старым.

Если нормально содержать Java в вашей игре без ее установки, то вы, вероятно, можете упаковать Java Runtime в свою игру и использовать сценарий запуска, чтобы установить JAVA_HOMEместоположение JRT до запуска игры.

РЕДАКТИРОВАТЬ: (комментарий комментария) Используя второй вариант, вам все равно понадобятся разные сборки для разных платформ, использующих соответствующую среду выполнения Java для этой платформы.

РЕДАКТИРОВАТЬ 2 : Также см. Недавний комментарий Дмитрия.

Эрен Гювен
источник
3
Если ваша игра некоммерческая, вы можете получить бесплатную лицензию Excelsior JET .
Дмитрий Лесков
Второй вариант звучит хорошо, но если я упаковываю свою Windows JRE, это кроссплатформенная? Точно так же, как с Excelsior, нужно ли запускать такие компиляторы на трех разных ОС?
leokhorn
1
Вам нужно будет связывать эти платформы JRE с каждым выпуском, но по сути он останется кроссплатформенным.
Дерек
1
@leokhorn В какой-то момент должен быть нативный код. Либо вы должны скомпилировать в собственный код, либо вы должны работать на собственной виртуальной машине. Нет плана C.
Адриан
1
GCJ теперь официально мертв , тогда как Excelsior JET Standard Edition также стала бесплатной для коммерческого использования , хотя, если вас беспокоит только простота распространения, есть много альтернатив
Дмитрий Лесков
1

Для Mac см. Документацию Oracle для упаковки Java-приложения для Mac . Они настроили Java 7 так, что вы можете объединить среду выполнения в пакет приложений, содержащий ваши файлы jar (.app - это папка, которая на самом деле считается исполняемым файлом), что необходимо для распространения в Mac App Store. По сути, пакет .app делает в основном то же, что предлагает ответ Eren's JAVA_HOME, но упакован как «родное» приложение Mac.

Для распространения без Mac App Store вы можете избежать подписания приложения, сообщая пользователям Mountain Lion, что они могут обойти Gatekeeper , щелкнув правой кнопкой мыши (или Ctrl + клик) на вашем приложении и нажав «Открыть», когда они сначала откройте приложение. Это все равно предупредит их о том, что приложение не подписано, но в любом случае позволит им открыть его, а затем разрешит им дважды щелкнуть приложение для последующих открытий.

(примечание: вы также можете обойтись без маркировки сценариев оболочки в стиле Linux как исполняемой и затем создать пакет .app вокруг этого. NetBeans делает это на Mac и Linux, хотя и без JRE / JDK в комплекте)

Краб
источник