wake-up-neo.net

JRE in eine ausführbare Windows-Datei einbetten?

Angenommen, ich möchte eine Java-Anwendung verteilen.

Angenommen, ich möchte es als einzelne ausführbare Datei verteilen. Ich könnte leicht eine .jar mit der Anwendung und all ihren externen Abhängigkeiten in einer einzigen Datei erstellen (mit etwas Ant-Hacking).

Angenommen, ich möchte es unter Windows als EXE-Datei verteilen. Das ist leicht genug, wenn man die Nice-Tools (wie Launch4j und dergleichen) verwendet.

Angenommen, ich möchte auch nicht darauf vertrauen, dass der Endbenutzer die richtige JRE (oder überhaupt JRE) installiert hat. Ich möchte eine JRE mit meiner App verteilen, und meine App sollte auf dieser JRE laufen. Es ist leicht genug, eine ausführbare Windows-Installationsdatei zu erstellen und einen Ordner mit allen erforderlichen JRE-Dateien darin einzubetten. Aber dann verteile ich eine installer und keine Einzeldatei-App.

Gibt es eine Möglichkeit, die Anwendung einzubetten, und eine JRE in eine EXE-Datei, die als Anwendungsstartprogramm fungiert (und nicht als Installationsprogramm)?

56
perp

Versuchen Sie, Avian und ProGuard toolkits zu verwenden Avian ermöglicht das Einbinden von virtuellen Maschinen in Ihre App. Linux, MacOS, Windows und iOS werden unterstützt. Mit ProGuard können Sie große Jar-Dateien verkleinern, um sich auf das Einbetten vorzubereiten.

23
i_home

Es gibt ein neues Werkzeug, das dies tut: Packr
https://github.com/libgdx/packr

10
Andrejs

Einige Optionen sind kommerziell sehr gut:

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

Es gibt zwei wichtige Open Source-Optionen, GCJ und VMKit

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

Andere längere Pfade würden IKVM.NET enthalten:

http://www.ikvm.net/

Welches ist eine .NET JVM, die statisch zu einer EXE kompiliert werden kann

7
metismo

Gibt es eine Möglichkeit, die Anwendung und eine JRE in eine EXE-Datei einzubetten, die als Anwendungsstartprogramm fungiert (und nicht als Installationsprogramm)?

Wenn ein kommerzielles Tool für Sie in Ordnung ist, löst install4j dieses Problem sehr reibungslos (siehe seine "Features" - Seite ). Es kann beide Anwendungsstarter und Installationsprogramme generieren. 

Ich würde mich hassen, mich zu oft zu wiederholen, also z. diese frühere Antwort wo ich es eingesteckt habe (als Installer Builder, aber es macht hier keinen großen Unterschied). 

Zusammenfassung/Fazit: install4j kann native .exe-Startprogramme erstellen, die nicht unbedingt von einer vorinstallierten JRE (oder einer anderen spezifischen Bibliothek) abhängig machen, und bietet flexible Optionen zum Bündeln (und Erkennen) von JREs.

4
Jonik

Mit Netbeans kann ein Java SE-Projekt in ein natives Anwendungsinstallationsprogramm gepackt werden, das eine JRE ..__ einbettet. Es ist hier: https://netbeans.org/kb/docs/Java/native_pkg.html :)

3
TianaR
1
saschabeaumont

Ich weiß, dass ich zu dieser Party etwas spät komme, aber es sieht so aus, als hätten ej-technologies (love your stuff) eine neue Lösung namens exe4j, die genau wie das OP funktionieren wird, ohne dass ein komisches Geschäft nötig ist.

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

Wenn Sie in einem OpenSource-Projekt arbeiten, bieten diese kostenlose Lizenzen (Sie müssen sich nur mit ihnen in Verbindung setzen). Wenn es sich um ein kommerzielles Projekt handelt, ist eine Lizenz erforderlich ... aber für eine Lizenz von 69 USD ist es verdammt billig und lohnt sich imho.

Von ihrer Website:

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 kann dies gemäß der Dokumentation tun. Ich habe es nur ohne eingebettete JRE ausprobiert, war aber sehr zufrieden. Es ist mit ant skriptfähig und wir bauen auf Linux.

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

Sie können einen Blick auf Folgendes werfen: http://ulibgcj.sourceforge.net/uswt.html Es verfügt über eine micro-swt-Bibliothek, die die Erstellung von GUI mit SWT erleichtert. und werfen Sie einen Blick auf Eclipse GCJ Builder

0
Kachwahed

Ich fand Engima Projector x86/x64 besser als BoxedApp Packer

Wenn Sie von Packr soft miminizejre erhalten, kopieren Sie Ihre Anwendung myapp.jar in den Launcher\jre\bin \.

und kopieren Sie das installierte jre-Beispiel C:\Programme\Files\Java\1.8.0_xxx\bin\javaw.exe in den Launcher\jre\bin \

Öffne die Engima Protector-Eingabe -> javaw.exe aus dem Startprogramm\jre\bin \

Und gehen Sie zu Optionen, wenn Sie eine hohe Komprimierung wünschen und Verschiedenes suchen -> Befehlszeile "-jar myapp.jar"

Und klicken Sie auf "schützen" und warten Sie, bis ganze DLLs und JAR in Exe sind

Stellen Sie sicher, dass Ihre myapp.jar von Eclipse mit "Erforderliche Bibliotheken in generiertes JAR-Paket" generiert werden soll, da Sie sich keine Sorgen machen müssen, ob Sie viele Bibliotheken importiert haben, z .

BoxedApp Packer ist aber auch der BoxedApp Packer ist etwas größer als Engima Protector. Protector ist fast das Beste, wenn man javaw.exe mit Assets/Ressourcen einbettet. Dann können sie keine JAR-Dateien knacken ... Ich hoffe, Sie sind mit dem eigenen jar in exe weniger als 4 MB ohne lib-Verzeichnis glücklich Verzeichnis von jre oder jdk

Bitte stellen Sie sicher, dass das eingebettete exe hier außerhalb des jre- oder jdk-Stammverzeichnisses liegt.

Ich hoffe, Sie haben kein Problem, wenn Sie Protector x86 verwenden, als dass Sie i586, Protector x64 für jre x64 verwenden müssen 

Wenn Sie Protector x64 mit jre x86/i386 verwenden, ist dies kein Problem. Es funktioniert gut.

Freundliche Grüße

// BEARBEITEN:

AKTUALISIERTE NEUE VERSION EXCELSIOR JET + VIRTUAL BOX OR PROTECTOR sind fast die besten "Embedded Applications"

Youtube überprüfen: https://www.youtube.com/watch?v=ctbIxq-1MGE

0
SourceSkyBoxer

Install4j ist ein großartiges Werkzeug für diesen Zweck. Außerdem konnten Sie JSmooth oder launch4j auschecken - alles obwohl ich versucht habe, Jres mit JSmooth zu bündeln und es nicht ..

0
user1330488