При запуске моего приложения JavaFX через IntelliJ все хорошо. Пользовательский загрузчик Log4j2 загружается и все FXML анализируются правильно. Однако, когда приложение упаковано как JAR с Maven, appender не найден. Чтобы исправить это, атрибут packages="MyApp.util"
включен в конфигурационный XML-файл журнала, указывая на пакет пользовательского приложения. Когда этот атрибут добавляется, приложение запускается при запуске с XMLStreamException: ParseError
, ссылающимся на произвольную строку в файле FXML.
Кроме того, независимо от включения атрибута пакетов, версия log4j2 отображается как null null
, когдазапуск Jar (в Intellij * Apache Log4j Core 2.12.1
):
2019-11-05 10:24:38,666 JavaFX Application Thread DEBUG null null initializing configuration XmlConfiguration[location=/home/me/config/logging.xml]
Я гарантировал, что реализация ядра Log4j API + включена в файл Jar. В Jar включена внутренняя библиотека компании, в зависимости от Log4j 1.x, но я не уверен, что это может вызвать конфликты.
Log4j2 XML-конфигурация:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" packages="MyApp.util">
<Appenders>
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
</Console>
<FXAppender name="JavaFXLogger">
<PatternLayout pattern="%d{HH:mm:ss} %msg%n"/>
<ThresholdFilter level="warn"/>
</FXAppender>
</Appenders>
<Loggers>
<Logger name="MyApp.data.Acquisitioner" level="info"/>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="JavaFXLogger"/>
</Root>
</Loggers>
</Configuration>
Трассировка стека:
10:24:38.931 DEBUG BoosterADTM.util.ConfigurationManager - Loaded configuration from /home/me/config/config.xml
javafx.fxml.LoadException:
file:/home/me/MyApp.jar!/MyApp/views/TuneMeter.fxml:262
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2543)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at company.fx.ViewLoader.<init>(ViewLoader.java:34)
at company.fx.ViewLoader.<init>(ViewLoader.java:23)
at MyApp.controller.MainTabsController.initViews(MainTabsController.java:79)
at MyApp.controller.MainTabsController.initialize(MainTabsController.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at company.fx.ViewLoader.<init>(ViewLoader.java:34)
at company.fx.ViewLoader.<init>(ViewLoader.java:23)
at MyApp.Main.start(Main.java:27)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$419(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$399(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$397(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$398(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$203(GtkApplication.java:139)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[262,49]
Message: Stream closed
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:599)
at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2513)
... 30 more