Hallo.
Ich arbeite an einem relativ komplexen Projekt, dass eine GUI mittels JavaFX darstellt. Darüber hinaus verwendet das Projekt noch diverse weitere Bibliotheken, wie z.B. Apache Commons, Bouncy Castle und SQLite. Der Build-Prozess wird mittels Apache Ant gesteuert, wobei die Abhängigkeiten (Bibliotheken) mit Apache Ivy verwalten werden. Bisher läuft das Projekt unter Java 8 (LTS).
Das Projekt soll nun aber von Java 8 auf Java 11 (LTS) portiert werden.
Das Problem: Während bei Java 8 das JavaFX noch fester bestandteil des JRE bzw. JDK war, ist es bei Java 11 nicht mehr enthalten. Soweit ich verstehe, müssen unter Java 11 deshalb jetzt die JavaFX-Bibliotheken von "OpenJFX" eingebunden werden, um JavaFX nutzen zu können.
Ich habe es auch soweit geschafft, die OpenJFX Bibliotheken in die ivy.xml einzutragen:
Der Build-Prozess läuft jetzt soweit durch. Jedoch zur Laufzeit bekomme ich beim Programmstart sofort folgenden Fehler:
Error: JavaFX runtime components are missing, and are required to run this application
Meine Vermutung: JavaFX besteht ja nicht bloß aus Java-Code (JAR Dateien), sondern eben auch aus "nativen" DLL-Dateien. Bei Java 8 waren diese im JRE bzw. JDK enthalten. Man findet bei Java 8 im "bin" Ordner des JDK/JRE die Dateien glass.dll, javafx_font.dll und so weiter, die offensichtlich den "platform-spezifischen" Teil von JavaFX enthalten. Diese Dateien fehlen natürlich bei einem Java 11 im JDK/JRE! Und über Apache Ivy werden zwar die JAR-Dateien für JavaFX in den Class-Path eingebunden, aber die zugehörigen DLL-Dateien fehlen dann immer noch zur Laufzeit im "bin" Verzeichnis!
(Jedenfalls sieht es mir so aus, als ob dass das Problem ist)
Kann mir jemand sagen, was der vorgesehen Weg ist, um JavaFX (OpenJFX) mit Java 11 zum Laufen bekommt, mit Apache Ant+Ivy?
Danke und viele Grüße!
Ich arbeite an einem relativ komplexen Projekt, dass eine GUI mittels JavaFX darstellt. Darüber hinaus verwendet das Projekt noch diverse weitere Bibliotheken, wie z.B. Apache Commons, Bouncy Castle und SQLite. Der Build-Prozess wird mittels Apache Ant gesteuert, wobei die Abhängigkeiten (Bibliotheken) mit Apache Ivy verwalten werden. Bisher läuft das Projekt unter Java 8 (LTS).
Das Projekt soll nun aber von Java 8 auf Java 11 (LTS) portiert werden.
Das Problem: Während bei Java 8 das JavaFX noch fester bestandteil des JRE bzw. JDK war, ist es bei Java 11 nicht mehr enthalten. Soweit ich verstehe, müssen unter Java 11 deshalb jetzt die JavaFX-Bibliotheken von "OpenJFX" eingebunden werden, um JavaFX nutzen zu können.
Ich habe es auch soweit geschafft, die OpenJFX Bibliotheken in die ivy.xml einzutragen:
XML:
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="com.example" module="jfx11"/>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base -->
<dependency org="org.openjfx" name="javafx-base" rev="11.0.2"/>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx -->
<dependency org="org.openjfx" name="javafx" rev="11.0.2">
<artifact name="javafx" type="pom" ext="pom"/>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base -->
<dependency org="org.openjfx" name="javafx-base" rev="11.0.2">
<artifact name="javafx-base" e:classifier="win"/>
<!--<artifact name="javafx-base" e:classifier="linux"/>-->
<!--<artifact name="javafx-base" e:classifier="mac"/>-->
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
<dependency org="org.openjfx" name="javafx-controls" rev="11.0.2">
<artifact name="javafx-controls" e:classifier="win"/>
<!--<artifact name="javafx-controls" e:classifier="linux"/>-->
<!--<artifact name="javafx-controls" e:classifier="mac"/>-->
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx -->
<dependency org="org.openjfx" name="javafx-graphics" rev="11.0.2">
<artifact name="javafx-graphics" e:classifier="win"/>
<!--<artifact name="javafx-graphics" e:classifier="linux"/>-->
<!--<artifact name="javafx-graphics" e:classifier="mac"/>-->
</dependency>
</dependencies>
</ivy-module>
Der Build-Prozess läuft jetzt soweit durch. Jedoch zur Laufzeit bekomme ich beim Programmstart sofort folgenden Fehler:
Error: JavaFX runtime components are missing, and are required to run this application
Meine Vermutung: JavaFX besteht ja nicht bloß aus Java-Code (JAR Dateien), sondern eben auch aus "nativen" DLL-Dateien. Bei Java 8 waren diese im JRE bzw. JDK enthalten. Man findet bei Java 8 im "bin" Ordner des JDK/JRE die Dateien glass.dll, javafx_font.dll und so weiter, die offensichtlich den "platform-spezifischen" Teil von JavaFX enthalten. Diese Dateien fehlen natürlich bei einem Java 11 im JDK/JRE! Und über Apache Ivy werden zwar die JAR-Dateien für JavaFX in den Class-Path eingebunden, aber die zugehörigen DLL-Dateien fehlen dann immer noch zur Laufzeit im "bin" Verzeichnis!
(Jedenfalls sieht es mir so aus, als ob dass das Problem ist)
Kann mir jemand sagen, was der vorgesehen Weg ist, um JavaFX (OpenJFX) mit Java 11 zum Laufen bekommt, mit Apache Ant+Ivy?
Danke und viele Grüße!
Zuletzt bearbeitet: