Es gibt eine Reihe von Tools ( Excelsior JET usw.), die behaupten, Java-Apps in native ausführbare Dateien ( *.exe
) zu verwandeln . Ich verstehe jedoch, dass diese Tools eigentlich nur native Wrapper erstellen, die java
über eine Shell oder eine Befehlszeile aufgerufen / ausgeführt werden.
Wenn dieses Verständnis falsch ist, sehe ich nicht, wie es sein könnte. Wenn eine laufende JVM (ein java
Prozess) im Grunde genommen ein Hochleistungsinterpreter ist, der Bytecode direkt aus Java-Klassendateien lädt, kann ich mir nicht vorstellen, wie eine Java-App (eine Sammlung von Bytecode-Dateien, die als Eingabe für eine JVM dienen) jemals aussehen könnte wirklich in eine ausführbare Datei umgewandelt.
Dies liegt daran, dass der JVM-Prozess bereits eine native ausführbare Datei ist, die Sätze von Bytecode-Dateien als Eingabe verwendet. Das Zusammenführen dieser Bytecodedateien und des JVM-Prozesses zu einer einzigen einheitlichen nativen ausführbaren Datei scheint nicht möglich zu sein, ohne die JVM vollständig neu zu schreiben und die Reling aus der JVM-Spezifikation zu entfernen.
Also frage ich: Wie diese Werkzeuge tatsächlich „verwandeln“ Java - Klassendateien in eine native ausführbare Datei, oder tun sie?