From 8e81f0865642a625adc997c6214bb74d72070de6 Mon Sep 17 00:00:00 2001 From: Konrad Neitzel Date: Mon, 17 Oct 2022 20:03:31 +0200 Subject: [PATCH 1/8] Problem mit log4j - beim Start des Images kommt immer die Meldung: "ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console..." --- pom.xml | 123 +++++++++++++++++++++-- src/main/java/de/kneitzel/JavaFXApp.java | 7 +- src/main/java/module-info.java | 2 + 3 files changed, 121 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index a9ca0e4..796af59 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,7 @@ 5.9.1 19 + 2.19.0 1.18.24 23.0.0 @@ -42,10 +43,10 @@ 1.0.0.RC2 0.1.3 3.16.0 - 6.49.0 + 6.50.0 2.11.0 4.7.2.0 - 4.7.2 + 4.7.3 UTF-8 @@ -86,6 +87,18 @@ compile + + org.apache.logging.log4j + log4j-api + ${log4j.version} + + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + org.junit.jupiter junit-jupiter-engine @@ -198,6 +211,7 @@ + org.moditect moditect-maven-plugin @@ -207,22 +221,110 @@ add-module-info-to-dependencies package + ${java.version} ${project.build.directory}/modules true - - + + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + + open module org.apache.logging.log4j.core { + requires java.logging; + requires java.rmi; + + requires transitive java.compiler; + requires transitive java.desktop; + requires transitive java.management; + requires transitive java.naming; + requires transitive java.scripting; + requires transitive java.sql; + requires transitive java.xml; + + exports org.apache.logging.log4j.core; + exports org.apache.logging.log4j.core.appender; + exports org.apache.logging.log4j.core.appender.db; + exports org.apache.logging.log4j.core.appender.db.jdbc; + exports org.apache.logging.log4j.core.appender.mom; + exports org.apache.logging.log4j.core.appender.mom.jeromq; + exports org.apache.logging.log4j.core.appender.mom.kafka; + exports org.apache.logging.log4j.core.appender.nosql; + exports org.apache.logging.log4j.core.appender.rewrite; + exports org.apache.logging.log4j.core.appender.rolling; + exports org.apache.logging.log4j.core.appender.rolling.action; + exports org.apache.logging.log4j.core.appender.routing; + exports org.apache.logging.log4j.core.async; + exports org.apache.logging.log4j.core.config; + exports org.apache.logging.log4j.core.config.arbiters; + exports org.apache.logging.log4j.core.config.builder.api; + exports org.apache.logging.log4j.core.config.builder.impl; + exports org.apache.logging.log4j.core.config.composite; + exports org.apache.logging.log4j.core.config.json; + exports org.apache.logging.log4j.core.config.plugins; + exports org.apache.logging.log4j.core.config.plugins.convert; + exports org.apache.logging.log4j.core.config.plugins.processor; + exports org.apache.logging.log4j.core.config.plugins.util; + exports org.apache.logging.log4j.core.config.plugins.validation; + exports org.apache.logging.log4j.core.config.plugins.validation.constraints; + exports org.apache.logging.log4j.core.config.plugins.validation.validators; + exports org.apache.logging.log4j.core.config.plugins.visitors; + exports org.apache.logging.log4j.core.config.properties; + exports org.apache.logging.log4j.core.config.status; + exports org.apache.logging.log4j.core.config.xml; + exports org.apache.logging.log4j.core.config.yaml; + exports org.apache.logging.log4j.core.filter; + exports org.apache.logging.log4j.core.filter.mutable; + exports org.apache.logging.log4j.core.impl; + exports org.apache.logging.log4j.core.jackson; + exports org.apache.logging.log4j.core.jmx; + exports org.apache.logging.log4j.core.layout; + exports org.apache.logging.log4j.core.layout.internal; + exports org.apache.logging.log4j.core.lookup; + exports org.apache.logging.log4j.core.message; + exports org.apache.logging.log4j.core.net; + exports org.apache.logging.log4j.core.net.ssl; + exports org.apache.logging.log4j.core.osgi; + exports org.apache.logging.log4j.core.parser; + exports org.apache.logging.log4j.core.pattern; + exports org.apache.logging.log4j.core.script; + exports org.apache.logging.log4j.core.selector; + exports org.apache.logging.log4j.core.time; + exports org.apache.logging.log4j.core.time.internal; + exports org.apache.logging.log4j.core.tools; + exports org.apache.logging.log4j.core.tools.picocli; + exports org.apache.logging.log4j.core.util; + exports org.apache.logging.log4j.core.util.datetime; + exports org.apache.logging.log4j.core.util.internal; + + provides javax.annotation.processing.Processor with + org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor; + provides org.apache.logging.log4j.core.util.ContextDataProvider with + org.apache.logging.log4j.core.impl.ThreadContextDataProvider; + provides org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory with + org.apache.logging.log4j.core.message.ExtendedThreadInfoFactory; + provides org.apache.logging.log4j.spi.Provider with + org.apache.logging.log4j.core.impl.Log4jProvider; + + } + + + - --> ${main.class} @@ -230,7 +332,9 @@ - --ignore-missing-deps + --ignore-missing-deps + --multi-release + ${java.version} @@ -255,6 +359,7 @@ ${main.module} 2 + APP_WITH_DEPENDENCIES true ${project.build.directory}/jlink-image diff --git a/src/main/java/de/kneitzel/JavaFXApp.java b/src/main/java/de/kneitzel/JavaFXApp.java index 2273df7..fe23b82 100644 --- a/src/main/java/de/kneitzel/JavaFXApp.java +++ b/src/main/java/de/kneitzel/JavaFXApp.java @@ -1,14 +1,16 @@ package de.kneitzel; import javafx.application.Application; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class JavaFXApp extends Application { + static final Logger logger = LogManager.getLogger(JavaFXApp.class); @Override public void start(Stage primaryStage) { @@ -24,6 +26,7 @@ public class JavaFXApp extends Application { } public static void main(String[] args) { + logger.warn("Starting ..."); launch(args); } diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index ca1dc44..b4a44bc 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -3,6 +3,8 @@ module FXAppModule { requires javafx.graphics; requires javafx.controls; requires javafx.web; + requires org.apache.logging.log4j; +// requires org.apache.logging.log4j.core; exports de.kneitzel; opens de.kneitzel; From 87e48ee65b7b276af9b5d405b84ada637646375f Mon Sep 17 00:00:00 2001 From: Konrad Neitzel Date: Fri, 21 Oct 2022 22:53:51 +0200 Subject: [PATCH 2/8] Added log4j config --- src/main/resources/log4j2.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/resources/log4j2.xml diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..acc1d8c --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file From a5008f7ea9638199fa6a6170c43ed5fed5a094f1 Mon Sep 17 00:00:00 2001 From: Konrad Neitzel Date: Fri, 21 Oct 2022 23:36:56 +0200 Subject: [PATCH 3/8] Added bindServices to jlink call. --- pom.xml | 3 +++ src/main/java/module-info.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 796af59..49ca3bb 100644 --- a/pom.xml +++ b/pom.xml @@ -256,6 +256,8 @@ requires transitive java.sql; requires transitive java.xml; + requires org.apache.logging.log4j; + exports org.apache.logging.log4j.core; exports org.apache.logging.log4j.core.appender; exports org.apache.logging.log4j.core.appender.db; @@ -358,6 +360,7 @@ ${launcher} ${main.module} + true 2 APP_WITH_DEPENDENCIES diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b4a44bc..6971745 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -4,7 +4,7 @@ module FXAppModule { requires javafx.controls; requires javafx.web; requires org.apache.logging.log4j; -// requires org.apache.logging.log4j.core; + requires org.apache.logging.log4j.core; exports de.kneitzel; opens de.kneitzel; From b4d325b26c572514ce311bc9aa6073aeb50a484e Mon Sep 17 00:00:00 2001 From: Konrad Neitzel Date: Sat, 22 Oct 2022 10:57:28 +0200 Subject: [PATCH 4/8] Fixed module-info of log4j-core: added missing uses. --- pom.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 49ca3bb..c75db0d 100644 --- a/pom.xml +++ b/pom.xml @@ -313,15 +313,18 @@ exports org.apache.logging.log4j.core.util.datetime; exports org.apache.logging.log4j.core.util.internal; + uses org.apache.logging.log4j.core.util.WatchEventService; + uses org.apache.logging.log4j.core.util.ContextDataProvider; + provides javax.annotation.processing.Processor with org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor; - provides org.apache.logging.log4j.core.util.ContextDataProvider with - org.apache.logging.log4j.core.impl.ThreadContextDataProvider; provides org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory with org.apache.logging.log4j.core.message.ExtendedThreadInfoFactory; provides org.apache.logging.log4j.spi.Provider with org.apache.logging.log4j.core.impl.Log4jProvider; + provides org.apache.logging.log4j.core.util.ContextDataProvider with + org.apache.logging.log4j.core.impl.ThreadContextDataProvider; } From 5e7900647d1857815cd2f0802ddb56588f95d617 Mon Sep 17 00:00:00 2001 From: Konrad Neitzel Date: Thu, 9 Mar 2023 21:29:30 +0100 Subject: [PATCH 5/8] Test to have a direct jpackage call inside the project. --- pom.xml | 296 ++++++------------ src/main/java/de/kneitzel/JavaFXApp.java | 17 +- src/main/java/de/kneitzel/MainWindow.java | 30 ++ src/main/java/module-info.java | 1 + .../resources/de/kneitzel/MainWindow.fxml | 11 + 5 files changed, 149 insertions(+), 206 deletions(-) create mode 100644 src/main/java/de/kneitzel/MainWindow.java create mode 100644 src/main/resources/de/kneitzel/MainWindow.fxml diff --git a/pom.xml b/pom.xml index c75db0d..578cc9f 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ FXAppModule 17 3.6.3 + javafxapp 5.9.1 @@ -52,6 +53,7 @@ UTF-8 ${java.version} ${java.version} + ${java.version} @@ -66,6 +68,11 @@ javafx-graphics ${javafx.version} + + org.openjfx + javafx-fxml + ${javafx.version} + org.openjfx javafx-web @@ -108,6 +115,7 @@ + ${jar.file} org.apache.maven.plugins @@ -191,208 +199,6 @@ - - org.apache.maven.plugins - maven-dependency-plugin - ${maven.dependency.plugin} - - - copy-dependencies - package - - copy-dependencies - - - ${project.build.directory}/modules - false - false - true - - - - - - - org.moditect - moditect-maven-plugin - ${moditect.maven.plugin} - - - add-module-info-to-dependencies - package - - ${java.version} - ${project.build.directory}/modules - true - - - - - - org.apache.logging.log4j - log4j-core - ${log4j.version} - - - open module org.apache.logging.log4j.core { - requires java.logging; - requires java.rmi; - - requires transitive java.compiler; - requires transitive java.desktop; - requires transitive java.management; - requires transitive java.naming; - requires transitive java.scripting; - requires transitive java.sql; - requires transitive java.xml; - - requires org.apache.logging.log4j; - - exports org.apache.logging.log4j.core; - exports org.apache.logging.log4j.core.appender; - exports org.apache.logging.log4j.core.appender.db; - exports org.apache.logging.log4j.core.appender.db.jdbc; - exports org.apache.logging.log4j.core.appender.mom; - exports org.apache.logging.log4j.core.appender.mom.jeromq; - exports org.apache.logging.log4j.core.appender.mom.kafka; - exports org.apache.logging.log4j.core.appender.nosql; - exports org.apache.logging.log4j.core.appender.rewrite; - exports org.apache.logging.log4j.core.appender.rolling; - exports org.apache.logging.log4j.core.appender.rolling.action; - exports org.apache.logging.log4j.core.appender.routing; - exports org.apache.logging.log4j.core.async; - exports org.apache.logging.log4j.core.config; - exports org.apache.logging.log4j.core.config.arbiters; - exports org.apache.logging.log4j.core.config.builder.api; - exports org.apache.logging.log4j.core.config.builder.impl; - exports org.apache.logging.log4j.core.config.composite; - exports org.apache.logging.log4j.core.config.json; - exports org.apache.logging.log4j.core.config.plugins; - exports org.apache.logging.log4j.core.config.plugins.convert; - exports org.apache.logging.log4j.core.config.plugins.processor; - exports org.apache.logging.log4j.core.config.plugins.util; - exports org.apache.logging.log4j.core.config.plugins.validation; - exports org.apache.logging.log4j.core.config.plugins.validation.constraints; - exports org.apache.logging.log4j.core.config.plugins.validation.validators; - exports org.apache.logging.log4j.core.config.plugins.visitors; - exports org.apache.logging.log4j.core.config.properties; - exports org.apache.logging.log4j.core.config.status; - exports org.apache.logging.log4j.core.config.xml; - exports org.apache.logging.log4j.core.config.yaml; - exports org.apache.logging.log4j.core.filter; - exports org.apache.logging.log4j.core.filter.mutable; - exports org.apache.logging.log4j.core.impl; - exports org.apache.logging.log4j.core.jackson; - exports org.apache.logging.log4j.core.jmx; - exports org.apache.logging.log4j.core.layout; - exports org.apache.logging.log4j.core.layout.internal; - exports org.apache.logging.log4j.core.lookup; - exports org.apache.logging.log4j.core.message; - exports org.apache.logging.log4j.core.net; - exports org.apache.logging.log4j.core.net.ssl; - exports org.apache.logging.log4j.core.osgi; - exports org.apache.logging.log4j.core.parser; - exports org.apache.logging.log4j.core.pattern; - exports org.apache.logging.log4j.core.script; - exports org.apache.logging.log4j.core.selector; - exports org.apache.logging.log4j.core.time; - exports org.apache.logging.log4j.core.time.internal; - exports org.apache.logging.log4j.core.tools; - exports org.apache.logging.log4j.core.tools.picocli; - exports org.apache.logging.log4j.core.util; - exports org.apache.logging.log4j.core.util.datetime; - exports org.apache.logging.log4j.core.util.internal; - - uses org.apache.logging.log4j.core.util.WatchEventService; - uses org.apache.logging.log4j.core.util.ContextDataProvider; - - provides javax.annotation.processing.Processor with - org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor; - provides org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory with - org.apache.logging.log4j.core.message.ExtendedThreadInfoFactory; - provides org.apache.logging.log4j.spi.Provider with - org.apache.logging.log4j.core.impl.Log4jProvider; - - provides org.apache.logging.log4j.core.util.ContextDataProvider with - org.apache.logging.log4j.core.impl.ThreadContextDataProvider; - } - - - - - - - ${main.class} - ${project.build.sourceDirectory}/module-info.java - - - - --ignore-missing-deps - --multi-release - ${java.version} - - - - add-module-info - - - - create-runtime-image - package - - create-runtime-image - - - - ${project.build.directory}/modules - - - ${main.module} - - - ${launcher} - ${main.module} - - true - 2 - - APP_WITH_DEPENDENCIES - true - ${project.build.directory}/jlink-image - - - - - - com.github.akman - jpackage-maven-plugin - ${jpackage.maven.plugin} - - - package - - jpackage - - - ${appName} - IMAGE - ${project.build.directory}/jlink-image - ${main.module}/${main.class} - - - - - com.github.spotbugs spotbugs-maven-plugin @@ -484,6 +290,92 @@ + + org.apache.maven.plugins + maven-dependency-plugin + ${maven.dependency.plugin} + + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/modules + org.openjfx + runtime + + + ${project.groupId} + ${project.artifactId} + ${project.version} + ${project.packaging} + + + false + false + true + + + + + + copy + install + + copy + + + ${project.build.directory}/modules + + + ${project.groupId} + ${project.artifactId} + ${project.version} + ${project.packaging} + ${project.build.finalName}.jar + + + true + + + + + + + com.github.akman + jpackage-maven-plugin + ${jpackage.maven.plugin} + + ${appName} + IMAGE + + + + + javafx\..* + + + + + + javafx.controls + + ${main.class} + ${project.build.directory}/modules + ${jar.file}.jar + + + + install + + jpackage + + + + diff --git a/src/main/java/de/kneitzel/JavaFXApp.java b/src/main/java/de/kneitzel/JavaFXApp.java index fe23b82..a0f7b5b 100644 --- a/src/main/java/de/kneitzel/JavaFXApp.java +++ b/src/main/java/de/kneitzel/JavaFXApp.java @@ -1,33 +1,42 @@ package de.kneitzel; import javafx.application.Application; +import javafx.application.Platform; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; +import javafx.scene.layout.AnchorPane; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.io.IOException; public class JavaFXApp extends Application { static final Logger logger = LogManager.getLogger(JavaFXApp.class); @Override - public void start(Stage primaryStage) { + public void start(Stage primaryStage) throws IOException { + primaryStage.setTitle("Hello World!"); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainWindow.fxml")); + Parent root = fxmlLoader.load(); + primaryStage.setScene(new Scene(root)); + primaryStage.show(); + /* Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(e -> System.out.println("Hello World!")); StackPane root = new StackPane(); root.getChildren().add(btn); - primaryStage.setScene(new Scene(root, 300, 250)); - primaryStage.show(); + */ } public static void main(String[] args) { logger.warn("Starting ..."); launch(args); } - } diff --git a/src/main/java/de/kneitzel/MainWindow.java b/src/main/java/de/kneitzel/MainWindow.java new file mode 100644 index 0000000..4398a1b --- /dev/null +++ b/src/main/java/de/kneitzel/MainWindow.java @@ -0,0 +1,30 @@ +package de.kneitzel; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; + +import java.net.URL; +import java.util.ResourceBundle; + +public class MainWindow implements Initializable { + + @FXML + private TextField textField; + public Button button; + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + if (button == null) { + textField.setText("Button is null"); + } else { + textField.setText("Button is not null"); + } + } + + @FXML + private void onButtonClick(ActionEvent actionEvent) { + + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 6971745..4c9a3a2 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -3,6 +3,7 @@ module FXAppModule { requires javafx.graphics; requires javafx.controls; requires javafx.web; + requires javafx.fxml; requires org.apache.logging.log4j; requires org.apache.logging.log4j.core; diff --git a/src/main/resources/de/kneitzel/MainWindow.fxml b/src/main/resources/de/kneitzel/MainWindow.fxml new file mode 100644 index 0000000..07c63e6 --- /dev/null +++ b/src/main/resources/de/kneitzel/MainWindow.fxml @@ -0,0 +1,11 @@ + + + + + + + +