Simples Runtime Image mit Jlink

inDex

Mitglied
Hallo zusammen,

ich versuche ein Simples JavaFX Programm mit Jlink zu erstellen, sodass dieses ohne ein JRE/JDK auf einem anderen Rechner auskommt.
Auch nach etlichen Youtube Videos und Tutorials (z.B. Getting Startet) und die Schritte 1 zu 1 nachstellen funktioniert es leider nicht ganz.

Das Programm funktioniert sowohl in der IDE, als auch als mittles Artifacts erstelltes .jar File.
Das Problem hängt (wie es aus den Meldungen hervor geht) mit den Modulen zusammen und da ich bisher nicht viel mit
Maven Projekten / Strukturen und Modulen generell zu tun hatte, weis ich leider nicht wo ich hier den Fehler mache.

Hier meine Projektstruktur:
Struktur.PNG

[CODE lang="java" title="module-info.java"]module myapp.myapp {
requires javafx.controls;
requires javafx.base;
requires javafx.fxml;
requires java.base;

opens myapp.myapp to javafx.fxml;
exports myapp.myapp;
}[/CODE]


Project Structure in Intellij:
-> Libraray: JavaFx JDK wurde der Library hinzugefügt
-> Modules: JavaFX Lib wurde dem Modul in Dependencies hinzugefügt (Maven Objekte entfernt)
-> Artifacts:
Artifacts.PNG



Wenn ich nun versuche das Image mit Jlink zu erzeugen, oder mir die requirements anzeigen zu lasse bekomme ich folgende Fehler:

C:\Users\Praktikant\Desktop\LPMProgramming\myapp\out\artifacts\myapp_jar>jdeps myapp.jar Exception in thread "main" java.lang.module.FindException: Module javafx.controls not found, required by myapp.myapp
at java.base/java.lang.module.Resolver.findFail(Resolver.java:893)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:192)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:141)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:421)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:255)
at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:564)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:603)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:557)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)
at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)

C:\Users\Praktikant\Desktop\LPMProgramming\myapp\out\artifacts\myapp_jar> jlink --module-path myapp.jar --add-modules myapp --output finish --compress=2 Error: Module myapp not found
java.lang.module.FindException: Module myapp not found
at java.base/java.lang.module.Resolver.findFail(Resolver.java:893)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:129)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:421)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:255)
at jdk.jlink/jdk.tools.jlink.internal.Jlink$JlinkConfiguration.resolve(Jlink.java:217)
at jdk.jlink/jdk.tools.jlink.internal.JlinkTask.createImageProvider(JlinkTask.java:536)
at jdk.jlink/jdk.tools.jlink.internal.JlinkTask.createImage(JlinkTask.java:424)
at jdk.jlink/jdk.tools.jlink.internal.JlinkTask.run(JlinkTask.java:276)
at jdk.jlink/jdk.tools.jlink.internal.Main.run(Main.java:55)
at jdk.jlink/jdk.tools.jlink.internal.Main.main(Main.java:33)

C:\Users\Praktikant\Desktop\LPMProgramming\myapp\out\artifacts\myapp_jar>jlink --module-path myapp.jar;"C:\Program Files\Java\javafx-jmods-17.0.1" --add-modules ALL-MODULE-PATH --output finish --compress=2 Error: Module myapp.myapp contains package javafx.event, module javafx.base exports package javafx.event to myapp.myapp

Wo genaue fehlt hier was oder wo mache ich einen Fehler :D?
Hoffe jemand sieht das Problem direkt und kann mir weiter helfen.
Vorab vielen Dank!
 

Anhänge

  • 1637249182073.png
    1637249182073.png
    35,6 KB · Aufrufe: 0
K

kneitzel

Gast
Wieso rufst Du es manuell auf? Zeig mal deine pom? Wenn Du das openjfx Plugin hast, dann sollte alles da sein und du kannst das Ziel javafx:jlink ausführen.
 

inDex

Mitglied
Ah okay, das Aufrufen über das Maven Toolfenster und javafx:link hat funktioniert!!
Wieder mal eine einfach Lösung auf die man erstmal stoßen muss. Wieso habe ich das in keinem
Tutorial so gesehen :/
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Das OpenJFX Plugin bringt zwei neue Ziele:
a) javafx:run - damit wird die Software gebaut und im Anschluss wird das Programm ausgeführt.
b) javafx:jlink - damit wird ein Image gebaut, das dann weiter gegeben werden kann.

Dazu musst Du nur das Maven Ziel ausführen. Das kannst Du über die IDE machen oder manuell auf der Kommandozeile. Das spielt dann keine Rolle.
 
K

kneitzel

Gast
Ah ja, Dein Beitrag wurde bearbeitet :)

Etwas Dokumentation findet sich z.B. im getting started im Abschnitt Runtime Images.

Aber zu viel würde ich da ggf. nicht rein investieren - das Plugin ist zwar für den Anfang ganz gut, aber es gibt leider Situationen, in denen es an seine Grenzen kommt und dann wird man eh einen anderen Weg gehen müssen.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben