Comment livrer mon application Java avec un JRE particulier?

Est-ce que quelqu’un sait comment compresser un JRE avec une application Java compilée? J’ai actuellement un fichier jar exécutable et souhaite y mettre JRE 6 Update 31. Pour que l’application utilise le JRE fourni, quelle que soit la version de JRE installée par le client. La solution doit fonctionner indépendamment de la plate-forme.

Des idées? Merci d’avance!

Sous OSX, ils s’éloignent d’Apple qui fournit Java et de Oracle à Java qui fournit Java. Cela signifie également que Java ne sera pas installé sur une nouvelle installation d’OSX. Oracle a fourni un outil permettant de compacter les installations Java et recommande vivement de fournir un jre dans le cadre de votre installation. L’avantage de cela est que le client n’aura pas besoin d’installer un package supplémentaire pour exécuter votre application. Vous pouvez tester votre application par rapport au runtime Java approprié et vous assurer qu’il n’y a pas d’incomptabilités avant l’expédition. Le désavantage est que la construction du programme d’installation est légèrement plus complexe et que la taille de votre téléchargement est plus grande.

Bien sûr, les installateurs de construction deviennent plus complexes si vous souhaitez fournir vos applications pour Windows, Linux ectera et il serait beaucoup plus simple de simplement fournir un fichier jar exécutable, mais ce n’est pas ce que les clients veulent. Les clients ne s’attendent pas à pouvoir télécharger une seule application et à exécuter le même fichier exe sur Windows, osx et linux. Ils sont contents
d’avoir différents installateurs pour chaque plate-forme et de s’attendre à ce qu’ils fonctionnent de manière différente.

Voici comment je le fais:

OSX: Utilisez AppBundler avec jre intégré, placé sur un Dmg avec DMGCanvas. L’utilisateur fait simplement glisser l’application dans son dossier / Application.

Windows: Utilisez Izpack avec un paquet jre enveloppé avec launch4j pour que le programme d’installation puisse être exécuté en tant que fichier exe.

Linux: Utilisez Izpack sans le package JRE, car les utilisateurs de Linux aiment contrôler exactement ce qui se trouve sur leur ordinateur, mais spécifient la version minimale de Java autorisée. Idéalement, je devrais créer des packages pour les principaux gestionnaires de packages Linux tels que rpm, mais j’ai décidé que cela ne valait pas la peine pour le moment, car les utilisateurs de Linux ne représentent qu’un faible pourcentage de ma clientèle.

La plupart des installations sont automatisées à l’aide de Maven et Ant. Il n’est donc pas difficile de créer ces différents programmes d’installation.

Si vous avez installé jre sur une plate-forme cible, par exemple Windows 64 bits, copiez simplement tout ce qui se trouve dans le dossier jre de votre installation Java et placez-le dans votre dissortingbution. Créez ensuite un fichier de commandes pointant sur votre jre local au lieu de celui du système.

Voici ce que je fais:

  • mon fichier jar est dans un dossier dist
  • copier le dossier système jre dans dist\jre-win-1.7.0_04
  • créez un fichier .bat avec la ligne suivante: jre-win-1.7.0_04\bin\java.exe -jar MyProgram.jar

..boom, c’est fait! Double-cliquez sur le fichier de commandes et il exécute votre fichier jar avec le jre local. Pour vous le prouver, désinstallez votre système et double-cliquez sur le fichier de commandes. Fonctionne encore.

Vous pouvez le faire sous Linux ou OS X de manière analogue.

J’aimerais également souligner qu’il s’agit d’une pratique assez courante et que de nombreuses dissortingbutions Java sont réalisées de la sorte. Alors, ne dites pas que vous ne pouvez pas ou ne devriez pas.

Il y a cependant des mises en garde. Cela rend votre dissortingbution plus grande et dépendante de la plate-forme, dans mon exemple Windows x64. Cependant, c’est faisable et gérable. Il existe un nombre fini de plates-formes sockets en charge pour jre et devinez quoi … elles dépendent aussi de la plate-forme.

Nous avons la même situation avec un produit commercial en production. Nous avons téléchargé les JRE Windows et Linux d’une version spécifique et l’ avons intégré à l’application à l’aide d’ IzPack .

“Notre” JRE doit être installé si l’on veut installer l’application, et l’application est exécutée par ce JRE indépendamment des JRE ou JDK installés par le système.

L’inconvénient est que: le programme d’installation doit être conçu pour Windows ou Linux et sa taille est d’environ 50 Mo. Les tailles de modules une fois décompressés sont:

  • app elle-même ~ 5MB
  • libs ~ 10 MB
  • JRE ~ 90 MB

Si je veux le rendre plus “indépendant de la plate-forme”, je devrai emballer les deux JRE, ce qui correspond à environ 100 Mo pour le programme d’installation. Et il ne serait toujours valable que pour deux types de plates-formes (voir la réponse de Cthulhu).

Notez que nous effectuons l’installation principalement à distance via SSH et que l’utilisation des options de compression augmente la durée du package d’un facteur d’au moins 10 fois (de quelques minutes à plusieurs dizaines de minutes).

Une solution relativement nouvelle, fournie par Oracle, est ici:

Emballage autonome

Ça lit:

Les packages d’applications autonomes offrent les avantages suivants:

  • Les utilisateurs installent l’application avec un programme d’installation qui leur est familier et la lancent de la manière habituelle.

  • Vous contrôlez la version du JRE utilisée par l’application.

  • Les applications peuvent être déployées sur de nouveaux systèmes sans qu’il soit nécessaire d’installer JRE.

Mais un inconvénient de cette approche est:

Les packages d’applications autonomes ne peuvent être créés qu’avec JDK 7 Update 6 ou une version ultérieure.

Si vous envisagez de dissortingbuer cet ensemble (votre application + JRE), il existe un utilitaire install4J, un puissant générateur d’installateur Java multiplate-forme qui génère des programmes d’installation et des lanceurs d’applications natifs pour les applications Java.

Vous pouvez le déployer avec java Webstart, ce qui vous permet de télécharger une certaine version de jre si elle n’est pas présente. Je ne sais pas si le déclassement est possible, cependant. Java doit également être installé.

Vous avez besoin de lanceurs spécifiques à la plate-forme qui utilisent un JRE placé à côté du fichier JAR. Bien sûr, vous pouvez le faire avec des fichiers de commandes et des scripts shell, mais il existe des solutions plus professionnelles qui créent des lanceurs natifs, telles que install4j . (Avertissement: ma société développe install4j). Une solution gratuite est izpack .

Ce n’est pas directement possible. Pour rendre cela possible, vous devez télécharger des ordinateurs virtuels pour chaque plate-forme. Pour Windows, copiez le JRE dans un répertoire et le jar, puis appelez la machine virtuelle Java dissortingbuée à l’aide de scripts shell. Mais c’est si difficile et la solution décrite par Cthulhu est la meilleure, c’est-à-dire vérifier la version et pointer sur la page Web.

Cependant, il y en a que vous pourriez consulter.

JSmooth – http://jsmooth.sourceforge.net/

Jar2Exe – http://transfer2pc.weebly.com/1/post/2011/10/jar2exe-converter-11-gui.html

S’il s’agit d’une application de la plate-forme NetBeans, NetBeans lui-même a la possibilité de regrouper des ressources supplémentaires et du JRE.

Source: https://platform.netbeans.org/tutorials/nbm-nbi.html#bundling-jre

Vous pouvez jeter un oeil à jrecreate fourni par oracle et faire tout ce dont vous avez besoin / envie.

https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/jrecreate.htm