Kann man Java auch kompilieren als EXE?

4 Antworten

Ja, mit GraalVM native geht das ziemlich gut: https://www.graalvm.org/latest/reference-manual/native-image/

Hat aber gewisse Einschränkungen, wenn Programme viel mit Reflection arbeiten. Java ist nun mal eine Sprache, bei der viel zur Laufzeit passiert, und das mit voller Absicht.

Man sollte sich also überlegen, in welchen Anwendungsfällen es überhaupt sinnvoll ist.

Ja, zum Beispiel mit GraalVM Native Image

Woher ich das weiß:Berufserfahrung – Softwareentwickler C#

Eine echte .exe wird schwierig.

Du müsstest die Java-VM mit reintun, un unabhängig zu sein. Das ist aber rechtlich problematisch und einfach doof.

So würde ich es machen:

Irgendeine Programmiersprache hernehmen, die schlanke .exe erzeugen kann, die nicht wieder irgendwelche anderen Laufzeitumgebungen benötigt (z.B. C) und damit diese Logik umsetzen:

//Pseudocode!
void runProgram() {
	String javaPath = findCompatibleJavaInMyDirectory();
	if (javaPath == null) {
		javaPath = findCompatibleJavaInSystem();
	}
	if (javaPath == null) {
		runJavaInstallationGuide((result) -> {
			if (result.isSuccessful()) {
				runProgram();
			}
		});
		return;
	}
	if (!runCommand(javaPath + " -jar blablubb.jar")) {
      new ErrorMessageBox("Programm konnte nicht gestartet werden").display();
  }
}

Kompilieren und deinem Programm beifügen.

Dasselbe ggf. für Linux und MacOS

Nun hat dein Programm eine OS-native Startdatei, auf die deine Installationsroutine verlinken kann.

Wenn der User dann startet und Java fehlt, muss er runJavaInstallationGuide durchlaufen. Wenn du das benutzerfreundlich gestaltest, kriegt er es sicher hin.

Woher ich das weiß:Hobby – Ich beschäftige mich schon mehrere Jahre damit.

jo135  07.09.2024, 08:58

Um Himmels willen. Erstens kann man Java mit Graal heute ziemlich gut AOT-kompilieren. Zweitens gibt es für das Mitpacken von JVMs in Installationspakete auch längst gute Lösungen direkt im JDK, damit so ein handgebastelter Pfusch gar nicht nötig ist (jlink, jpackage).

Muss mich den Vorrednern anschließen. Dafür eignen sich Sprachen ohne Framework einfach besser.

RUST oder GO wären da meine Wahl. C# braucht dann wieder das .NET-Framework. Bin schon ein paar Jahre da raus, aber ist das nicht inzwischen integraler Teil von Windows? Die meisten haben es jedenfalls auf dem Rechner, weil irgendein Programm es immer benutzt. :-)

Java mag ich persönlich nicht, aber das ist Geschmacksache. Die UIs sahen immer grausam aus und mich hat es angek**tzt, dass es immer Konflikte mit Versionen gab.


jo135  06.09.2024, 15:05
Die UIs sahen immer grausam aus

Gibt es vernünftige GUI-Bibliotheken für Go oder Rust? Ich kenne eigentlich niemanden, der damit irgendwelche GUI-Applikationen baut. Praktisch alles CLI oder irgendwelche Services.

und mich hat es angek**tzt, dass es immer Konflikte mit Versionen gab.

Konflikte womit? Java war eine Wohltat nach der "DLL-Hell" der klassischen Win32-Apps: alle Abhängigkeiten im Build zusammenpacken, wenn man mag auch das JDK dazu, und es gibt garantiert keine Konflikte. Das JDK selbst ist geradezu religiös rückwärtskompatibel, was bei .net z.B. nie der Fall war, wieder der gleiche Wahnsinn wie damals.