2016-07-06 7 views
0

Ich arbeite gerade an einer JAR-Datei und werde sie bald verteilen. Ich freute mich darauf, es für Benutzer zu verteilen, ohne dass er JRE installieren musste, um meine App laufen zu lassen. Ich kenne Werkzeuge wie Jar2Exe, aber diese Tools injizieren einige zusätzliche Inhalte in die ausführbare Datei und ich werde keine Lizenz dafür kaufen! Also arbeite ich an einer Lösung. Und ich habe die Idee, also werde ich eine C-Datei mit folgendem Inhalt erstellen (I C Sprache Macht in Krippe bin mit!):Schritte zur manuellen Installation von JRE auf dem Benutzer-PC

#include <stdlib.h> 

int main() { 
    system("java -jar test.jar"); 
    return 0; 
} 

Und ich werde die JAR-Datei und die kompilierte Datei der C-Datei oben und java.exe in meinem JRE-Installationsverzeichnis in einem selben Verzeichnis und das sollte funktionieren, aber sicherlich gibt es eine Reihe von DLLs, die java.exe von ihnen abhängt! Eine Liste dieser Abhängigkeiten, um sie alle in ein Verzeichnis zu setzen und die Idee zum Laufen zu bringen, wird sehr hilfreich sein :)

Bitte beachten Sie: Ich möchte keine ausführbare Datei aus der JAR-Datei erstellen, ich möchte nur die Benutzer muss nicht INSTALLIEREN JRE.

EDIT


I der obige Ansatz realisiert ist nicht praktikabel, so werde ich JRE hinter den Kulissen installieren (mein einziges Ziel ist es, dass der Benutzer nicht heraus finden, was los ist im Installationsprozess) Ich werde die erforderlichen Dateien nach ProgramFiles/jre_version kopieren, aber was soll ich zusätzlich tun? Mit anderen Worten, was macht der JRE-Installer unter der Haube?

+1

Die Ausführung einer Java-Anwendung ist ohne eine JRE nicht möglich. – Shriram

+1

Unterscheidet sich java.exe + viele DLLs sehr von normaler JRE? – Sergio

+0

JRE ist eine * Laufzeitumgebung *, wie der Name schon sagt. Es ist die Umgebung, in der das Java-Programm läuft. Es kann nicht außerhalb davon laufen. –

Antwort

1

Warum denken Sie, dass diese anderen Unternehmen möchten, dass Sie Geld für ihr Produkt bezahlen?

Hinweis: weil es nicht so einfach ist.

Der Punkt ist, dass nicht nur Ihre JAR-Datei benötigt. Sie müssen jede Klasse, die Ihr Code verwendet, für die JVM verfügbar machen, die Sie starten.

Sie wissen genau, dass andere Sachen, die diese kommerziellen Werkzeuge sind Unterstützung in ihre EXE-Dateien; Das Zeug, das Sie denken, macht ihre EXE-Dateien so groß und langsam. Das ist das Zeug, das Sie brauchen, um Ihre Java-Klassen zu starten ...

Die JRE allein kommt mit Megabyte und Megabyte Java-Klassen, verpackt in verschiedenen JARs. Und jede Bibliothek von Drittanbietern, die Sie verwenden, wird ebenfalls benötigt.

Wenn Sie also alle Klassen finden können, die geladen werden, wenn Ihr Code ausgeführt wird, können Sie das manuell in einem einzigen JAR verpacken. Aber wie gesagt: Wenn das ein leichtes Unterfangen wäre, hätten diese anderen Leute nicht viel von einem Geschäftsfall. Und natürlich: Sobald Reflektion und Class.forName() einsteigen, bist du komplett kaputt. Da Sie überhaupt nicht vorhersagen können, welche Klassen zur Laufzeit dann verwendet werden.

Verwandte Themen