Hallo, ich habe bisher mit Java keine ernsthaften Desktop- bzw. GUI-Anwendungen erstellt - jedenfalls nicht nach der Version 1.4 (2003/2004). Wie verhält sich das mit den Java-Images auf unterschiedlichen Betriebssystemen? Sind die genauso überall lauffähig wir Jar-Dateien? Ich kann mir das fast nicht vorstellen. Kann ich evtl. mit Maven Java-Images für Windows und Linux bauen? Möglichst auf einen Rutsch. Peinlicherweise hat mich gerade mein Chef gefragt und ich habe keine Ahnung davon. Ich weiß nur, dass man keine Java-Runtime mehr braucht, aber das ist auch schon alles.
Hallo, ich habe bisher mit Java keine ernsthaften Desktop- bzw. GUI-Anwendungen erstellt - jedenfalls nicht nach der Version 1.4 (2003/2004). Wie verhält sich das mit den Java-Images auf unterschiedlichen Betriebssystemen? Sind die genauso überall lauffähig wir Jar-Dateien? Ich kann mir das fast nicht vorstellen. Kann ich evtl. mit Maven Java-Images für Windows und Linux bauen? Möglichst auf einen Rutsch. Peinlicherweise hat mich gerade mein Chef gefragt und ich habe keine Ahnung davon. Ich weiß nur, dass man keine Java-Runtime mehr braucht, aber das ist auch schon alles.
Nein, JPackage erzeugt ein AppImage für genau die eigene Plattform. Und das ist ja u.a. eine JRE für die Plattform sowie ggf. Plattform bezogener Dateien (z.B. bei JavaFX oder anderen Hardware Nahen Abhängigkeiten).
Das bedeutet, dass du es auf den jeweiligen Plattformen bauen musst.
Dies kann man aber z.B. über ci/cd Pipelines machen mit entsprechenden Workern und so.
Das ist immer noch Java Bytecode + JRE + einer EXE die das alles startet.
Hier mal einfach der Inhalt eines Ergebnisses auf einem Debian System mit Java 21 (runtime habe ich nur ein Unterverzeichnis gezeigt - das sollte ausreichen)
Du kannst also in app sehr gut die Abhängigkeiten als auch das eigentliche jar File (javafxapp-1.0-SNAPSHOT.jar) erkennen und in lib hast Du die JRE (mit den Modulen, die Du brauchst).
Die Native Übersetzung könntest Du aber auch probieren. Da wäre dann GraalVM mit NativeImage vermutlich das Tool der Wahl. Hier habe ich aber Probleme gehabt, das mit JavaFX zum laufen zu kriegen. In dem JavaMavenApp Repository auf GitHub von mir wäre das aber auch als Option mit drin. Aber das Kernproblem hier ist nach meinem Verständnis dann, dass ja die Klassen native übersetzt werden und dann so mit dem Classloader nicht mehr funktionieren. Aber GraalVM habe ich - auch auf Grund von möglichen Lizenz-Problemen - nicht weiter vertieft (Ich weiss nicht, ob die Lizenz problematisch sein könnte - es ist Oracle und auf den ersten Blick war die Lizenz nicht wirklich klar/sauber abzugrenzen.)
Was aber wichtig ist: GraalVM braucht auch die entsprechenden Build Systeme und die sind deutlich schwerer aufzusetzen (Windows halt mit der passenden Visual Studio Version und so ...). Also nicht ganz so einfach mit einem 08/15 Worker bei GitHub oder einem ähnlichen Anbieter.
Contribute to kneitzel/JavaMavenApp development by creating an account on GitHub.
github.com
Was ich da als sinnvoll erachte in einem Maven Projekt kannst Du ja einfach ignorieren. Mit Java 21 kannst Du direkt ein mvnw -Pimage install machen und bekommst dann ein target/jpackage. Und dann einfach mal auf diversen Plattformen, die dir zur Verfügung stehen, ausprobieren.