web-dev-qa-db-fra.com

Intégrer un JRE dans un exécutable Windows?

Supposons que je veuille distribuer une application Java.

Supposons que je veuille le distribuer comme un seul exécutable. Je pourrais facilement construire un fichier .jar avec l’application et toutes ses dépendances externes dans un seul fichier (avec quelques piratages Ant).

Supposons maintenant que je veuille le distribuer sous forme de fichier .exe sous Windows. C'est assez facile, étant donné les outils de Nice disponibles (tels que Launch4j et autres).

Mais supposons maintenant que je ne veuille pas non plus que l’utilisateur final ait installé le bon JRE (ou n’importe quel JRE). Je souhaite distribuer un JRE avec mon application, et celle-ci doit s'exécuter sur ce JRE. Il est assez facile de créer un exécutable d'installation Windows et d'intégrer un dossier contenant tous les fichiers JRE nécessaires. Mais alors je distribue un installer et pas une application mono-fichier.

Est-il possible d'intégrer à la fois l'application, et un JRE, dans un fichier .exe faisant office de lanceur d’applications (et non d’installateur)?

56
perp

Essayez d'utiliser Avian et ProGuard toolkits . Avian permet d'intégrer une machine virtuelle légère dans votre application. Linux, MacOS, Windows et iOS sont pris en charge. Et ProGuard vous permet de réduire le fichier JAR volumineux pour vous préparer à l’intégrer.

23
i_home

Il y a un nouvel outil qui fait ça: Packr
https://github.com/libgdx/packr

10
Andrejs

Assez peu d'options, commercialement, c'est très bien:

http://www.excelsior-usa.com/jet.html

Il y a deux options open source clés GCJ et VMKit

http://gcc.gnu.org/Java/ et http://vmkit.llvm.org/

IKVM.NET est un autre chemin plus long:

http://www.ikvm.net/

Qui est une machine virtuelle .NET qui peut être compilée statiquement en un EXE

7
metismo

Existe-t-il un moyen d’intégrer à la fois l’application et un JRE dans un fichier .exe servant de lanceur d’application (et non d’installateur)?

Si un outil commercial vous convient, install4j résout ce problème très facilement (voir la page "Fonctionnalités" ). Il peut générer les deux lanceurs et installateurs d’applications. 

Je ne voudrais pas trop me répéter, alors vérifiez par exemple. cette réponse précédente où je l'ai branchée (en tant que constructeur d'installateurs, mais cela ne fait pas grande différence ici). 

Résumé/résultat inférieur: install4j peut créer des lanceurs natifs .exe qui dépendent absolument de non _ dépendant d'un JRE préinstallé (ou de toute autre bibliothèque spécifique) et offrant des options flexibles pour lier (et détecter) les JRE.

4
Jonik
1
saschabeaumont

Je sais que je suis un peu en retard pour cette fête, mais il semble que ej-technologies (adore leurs trucs) ait une nouvelle solution appelée exe4j qui fera exactement ce que l'OP voulait sans aucune activité amusante.

http://www.ej-technologies.com/products/exe4j/overview.html

Si vous travaillez dans un projet OpenSource, ils fournissent des licences gratuites (il vous suffit de les contacter). Si c'est un projet commercial, alors une licence est requise ... mais à 69 USD pour une licence, c'est sacrément bon marché et ça vaut le coup.

De leur site web:

If you want your own process name instead of Java.exe in the task manager
and a user friendly task-bar grouping, exe4j does the job for you.

exe4j helps you with starting your Java applications in a safe way, displaying
native splash screens, detecting or distributing suitable JREs and JDKs,
startup error handling and much more.
1
SnakeDoc

JSmooth peut le faire conformément à la documentation. Je l'ai seulement essayé sans JRE intégré, mais j'ai été très satisfait. Il est scriptable avec ant et nous utilisons Linux.

http://jsmooth.sourceforge.net/features.php

0

Vous pouvez consulter: http://ulibgcj.sourceforge.net/uswt.html Il possède une bibliothèque micro-swt qui facilite la construction d’une interface graphique à l’aide de SWT .__ et regardez Eclipse GCJ Builder

0
Kachwahed

J'ai trouvé Engima Projector x86/x64 mieux que BoxedApp Packer

Si vous avez peu de problèmes par paquet, copiez votre application myapp.jar dans launcher\jre\bin \.

et copier à partir de l'exemple installé jre C:\Program Files\Files\Java\1.8.0_xxx\bin\javaw.exe vers launcher\jre\bin \

Ouvrez l’entrée Engima Protector -> javaw.exe à partir du programme de lancement\jre\bin \

Et allez dans Options si vous voulez compresser haut et Trouver Divers -> Ligne de commande "-jar myapp.jar"

Et cliquez sur protéger et attendre des dll entières et jar dans exe

Assurez-vous que votre fichier myapp.jar doit être généré par Eclipse avec "Package de bibliothèques requises dans un fichier JAR généré", car vous ne vous inquiétez pas si vous avez importé de nombreuses bibliothèques, telles que lwjgl ou JavaFX, que vous devez vérifier si javaw_protected.exe incorporé a inclus des fichiers importants .

Mais BoxedApp Packer est également identique. BoxedApp Packer est un peu plus gros que Engima Protector. Protector est presque le meilleur petit incorporant javaw.exe avec des actifs/ressources. Qu'ils ne peuvent pas déchiffrer les fichiers jar ... J'espère que vous êtes satisfait de votre propre jar dans l'exe, car moins de 4 Mo sans répertoire lib - Si vous avez un problème avec le message d'erreur jvm.cfg Cela signifie que vous ne copiez pas l'exe incorporé dans la racine répertoire de jre ou jdk

Assurez-vous que le fichier exe incorporé est présent en dehors du répertoire racine de jre ou jdk.

J'espère que vous n'avez pas de problème si vous utilisez Protector x86, vous devez utiliser i586, Protector x64 pour jre x64 

Si vous utilisez Protector x64 avec jre x86/i386, aucun problème. Ça fonctionne bien.

Meilleures salutations

// MODIFIER:

NOUVELLE VERSION MISE À JOUR EXCELSIOR JET + VIRTUAL BOX OR Les protecteurs sont presque les meilleurs "applications intégrées"

Vérifiez youtube: https://www.youtube.com/watch?v=ctbIxq-1MGE

0
SourceSkyBoxer

Install4j est un excellent outil pour ce genre de propos. Vous pouvez également consulter JSmooth ou launch4j-all, bien que j’ai essayé de regrouper jres avec JSmooth sans pouvoir le faire ..

0
user1330488