Comment lancer une application Java autonome, c'est à dire avec une JVM intégrée ?
Bonjour,
J'ai réalisé un jeu vidéo de 25 000 lignes de code en JavaFX (son nom Hyper Galactica). Je veux le faire distribuer par Steam. Mais Steam n'accepte pas, a priori, de lancer un fichier de commandes .bat qui installe (avec un programme d'installation ou "installer") un JRE (JVM) spécifique, puis lance mon application dessus.
Donc, pour contourner ce problème, je voudrais créer un "emballage d'application autonome" et fournir un fichier "simple" (.jar ou .exe) à Steam, ce fichier comprenant le JRE et mon application.
Q1: Je développe sous Eclipse et je n'ai pas vu de moyen de générer, avec cet IDE, un package complet incluant le JRE et mon application. Mais peut-être est-ce possible. Dans ce cas, comment?
Q2: Connaitriez-vous un moyen simple de générer une application autonome comportant le JRE et le jeu à lancer? J'ai bien vu javafxpackager ou innosetup, mais çà me parait bien compliqué. Avez-vous d'autres idées ou pouvez-vous m'éclairez dans l'utilisation d'un de ces deux outils pour effectuer cette génération?
Merci d'avance
Pascal
Pour information, le fichier .bat que Steam rejette (et qui est pourtant basique) est:
@echo off
REM The game only works on 64 bits
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT
echo %OS%
if %OS%==32BIT echo Windows is a 32bits operating system. Hyper Galactica only works on Windows 64 bits
if %OS%==32BIT goto fin
if %OS%==64BIT echo Hyper Galactica for Windows 64bits.
REM JRE installer, if it is necessary
if exist jre1.8.0 (echo jre already installed in the jre1.8.0 folder)
if not exist jre1.8.0 (
echo installer command for 1.8.0.191 jre
jre-8u191-windows-x64 /s INSTALLDIR=%~dp0jre1.8.0
)
REM launch rhe game
start %~dp0jre1.8.0\bin\java.exe -classpath %~dp0 -jar hg.jar
:fin
c'est bien Q2 que je dois résoudre - Ah, Steam et la sécurité ...!
Citation:
Envoyé par
Mickael_Istria
Questions et commentaires preliminaires:
0. Est-ce que tu es sur que Steam accepte un `.jar` comme launcher? Si oui, alors ca veut dire qu'il comprend un peu le Java, suffisamment pour peut-etre automatiquement resource ton probleme. Si non, alors il te faut un .exe; et donc c'est Q2 et rien d'autre.
0.5: Puisque tu codes en Java, ton jeu est surement multi-platforme, donc tu devrais eviter de te focaliser sur Windows et les .bat et chercher quelque chose de multi-platforme.
Q1: Embarquer un JRE dans l'appli, ce n'est malheureusement pas un cas bien outille par les IDEs. Il faut passer par des outils externes. Mais c'est un cas interessant, et tu peux toujours ouvrir de bugs aux IDEs pour leur demander de mieux supporter ca; car au final ca doit etre assez commun.
Q1.5: Certains frameworks (generalement des frameworks RCP) fournissent nativement cette capacite d'inclure un JRE; mais je ne crois pas que JavaFX le fasse.
Q2. Plutot qu'un installeur (qui rajoute une etape d'installation), je te conseille d'utiliser un wrapper type launch4j. Il y a moyen de mettre le JRE dans l'executable qu'il cree et dans ce cas ca fera exactement ce que tu veux.
Merci pour ta réponse précise.
C'était si simple de fournir à Steam le fichier .bat faisant l'install de la JVM (en cas d'inexistence sur le PC) puis de lancer l'application .... Steam veut certainement éviter les pbs de sécurité avec les batchs ...
Je vais donc partir sur la solution Q2, comme tu l'indiques. Quelle est la différence entre launch4j et javapackager? Je cherche la facilité dans l'utilisation de l'outil me permettant de créer le "tout en 1", à savoir un exécutable qui lance la JVM que j'ai choisie puis mon application dessus.