diff --git a/.gitignore b/.gitignore index cfb679a..75c87dd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ out/ target/ *.iml /.gradle/ - +/logs diff --git a/README.md b/README.md index b187cf8..d1a5841 100644 --- a/README.md +++ b/README.md @@ -129,5 +129,8 @@ mvn -Pwin gluonfx:build -D"https.proxyHost"=127.0.0.1 -D"https.proxyPort"=7890 mvn -Pmac gluonfx:build -D"https.proxyHost"=127.0.0.1 -D"https.proxyPort"=7890 ``` +## 日志 +添加了支持GraalVM的Logback作为日志框架,在你自己的项目,如果是第一次添加以及后续修改了Logback配置文件的时候,在执行GraalVM构建之前,先用`mvn -Pwin gluonfx:runagent`或`.\gradlew.bat nativeRunAgent`来为`native-image`生成一些必要的文件,它会自动保存到`src/main/resources/META-INF/native-image`,然后在执行GraalVM构建,否则生成的程序执行时不会生成日志文件,正常情况下,会在程序执行目录创建`logs`目录及日志文件 + ## 补充 有时候`mvn gluonfx:build`或者`.\gradlew.bat jpackageImage`发生了错误后,执行`.\gradlew.bat clean`提示文件被占用,这时候可以打开`任务管理器-性能-资源监视器-CPU`,在`关联的句柄`处输入`gluon`、`jpackage`等关键词来检索出卡住的相关进程并干掉他 diff --git a/build.gradle b/build.gradle index dec23b4..0e74efb 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,8 @@ javafx { dependencies { implementation("io.github.palexdev:materialfx:11.16.1") + implementation("org.slf4j:slf4j-api:2.0.12") + implementation("ch.qos.logback:logback-classic:1.5.3") } jlink { diff --git a/pom.xml b/pom.xml index 678f77b..68742dc 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,16 @@ materialfx 11.16.1 + + org.slf4j + slf4j-api + 2.0.12 + + + ch.qos.logback + logback-classic + 1.5.3 + diff --git a/src/main/java/com/icuxika/MainApp.java b/src/main/java/com/icuxika/MainApp.java index 7d75e66..cee7cf0 100644 --- a/src/main/java/com/icuxika/MainApp.java +++ b/src/main/java/com/icuxika/MainApp.java @@ -13,11 +13,15 @@ import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.stage.Stage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Locale; public class MainApp extends Application { + private static final Logger LOGGER = LoggerFactory.getLogger(MainApp.class); + @Override public void start(Stage primaryStage) throws Exception { AppResource.setLanguage(Locale.SIMPLIFIED_CHINESE); @@ -47,6 +51,12 @@ public void start(Stage primaryStage) throws Exception { primaryStage.titleProperty().bind(AppResource.getLanguageBinding("title")); primaryStage.setScene(new Scene(vBox, 600, 400)); primaryStage.show(); + + LOGGER.trace("[trace]日志控制台输出"); + LOGGER.debug("[debug]日志控制台输出"); + LOGGER.info("[info]日志记录到logs/application.log中"); + LOGGER.warn("[warn]日志记录到logs/application.log中"); + LOGGER.error("[error]日志记录到logs/application.log中"); } public static void main(String[] args) { diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 39d7fed..5f761f0 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -8,6 +8,7 @@ requires javafx.web; requires MaterialFX; + requires org.slf4j; exports com.icuxika; } \ No newline at end of file diff --git a/src/main/resources/META-INF/native-image/filter-file.json b/src/main/resources/META-INF/native-image/filter-file.json new file mode 100644 index 0000000..d173ee0 --- /dev/null +++ b/src/main/resources/META-INF/native-image/filter-file.json @@ -0,0 +1,11 @@ +{ "rules": [ + {"excludeClasses" : "com.sun.glass.ui.mac.*"}, + {"excludeClasses" : "com.sun.glass.ui.gtk.*"}, + {"excludeClasses" : "com.sun.glass.ui.win.*"}, + {"excludeClasses" : "com.sun.prism.es2.*"}, + {"excludeClasses" : "com.sun.prism.d3d.*"}, + {"excludeClasses" : "com.sun.scenario.effect.impl.es2.*"}, + {"excludeClasses" : "com.sun.scenario.effect.impl.hw.d3d.*"}, + {"excludeClasses" : "com.gluonhq.attach.**"} + ] +} diff --git a/src/main/resources/META-INF/native-image/jni-config.json b/src/main/resources/META-INF/native-image/jni-config.json new file mode 100644 index 0000000..515741f --- /dev/null +++ b/src/main/resources/META-INF/native-image/jni-config.json @@ -0,0 +1,61 @@ +[ +{ + "name":"[Lcom.sun.glass.ui.Screen;" +}, +{ + "name":"com.sun.glass.ui.Cursor", + "methods":[{"name":"getNativeCursor","parameterTypes":[] }, {"name":"getType","parameterTypes":[] }] +}, +{ + "name":"com.sun.glass.ui.Screen", + "methods":[{"name":"","parameterTypes":["long","int","int","int","int","int","int","int","int","int","int","int","int","int","int","int","float","float","float","float"] }] +}, +{ + "name":"com.sun.glass.ui.Size", + "methods":[{"name":"","parameterTypes":["int","int"] }] +}, +{ + "name":"com.sun.javafx.font.directwrite.DWRITE_GLYPH_METRICS", + "fields":[{"name":"advanceHeight"}, {"name":"advanceWidth"}, {"name":"bottomSideBearing"}, {"name":"leftSideBearing"}, {"name":"rightSideBearing"}, {"name":"topSideBearing"}, {"name":"verticalOriginY"}], + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"com.sun.javafx.font.directwrite.DWRITE_GLYPH_RUN", + "fields":[{"name":"advanceOffset"}, {"name":"ascenderOffset"}, {"name":"bidiLevel"}, {"name":"fontEmSize"}, {"name":"fontFace"}, {"name":"glyphAdvances"}, {"name":"glyphIndices"}, {"name":"isSideways"}], + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"com.sun.javafx.font.directwrite.DWRITE_MATRIX", + "fields":[{"name":"dx"}, {"name":"dy"}, {"name":"m11"}, {"name":"m12"}, {"name":"m21"}, {"name":"m22"}], + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"com.sun.javafx.font.directwrite.RECT", + "fields":[{"name":"bottom"}, {"name":"left"}, {"name":"right"}, {"name":"top"}], + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"com.sun.prism.impl.PrismSettings", + "fields":[{"name":"disableD3D9Ex"}, {"name":"forceGPU"}, {"name":"isVsyncEnabled"}, {"name":"verbose"}] +}, +{ + "name":"java.lang.Class", + "methods":[{"name":"forName","parameterTypes":["java.lang.String","boolean","java.lang.ClassLoader"] }] +}, +{ + "name":"java.lang.Runnable", + "methods":[{"name":"run","parameterTypes":[] }] +}, +{ + "name":"java.lang.String", + "methods":[{"name":"toLowerCase","parameterTypes":["java.util.Locale"] }] +}, +{ + "name":"java.util.ArrayList", + "methods":[{"name":"","parameterTypes":["int"] }, {"name":"add","parameterTypes":["java.lang.Object"] }] +}, +{ + "name":"java.util.HashMap", + "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }] +} +] diff --git a/src/main/resources/META-INF/native-image/predefined-classes-config.json b/src/main/resources/META-INF/native-image/predefined-classes-config.json new file mode 100644 index 0000000..0e79b2c --- /dev/null +++ b/src/main/resources/META-INF/native-image/predefined-classes-config.json @@ -0,0 +1,8 @@ +[ + { + "type":"agent-extracted", + "classes":[ + ] + } +] + diff --git a/src/main/resources/META-INF/native-image/proxy-config.json b/src/main/resources/META-INF/native-image/proxy-config.json new file mode 100644 index 0000000..0d4f101 --- /dev/null +++ b/src/main/resources/META-INF/native-image/proxy-config.json @@ -0,0 +1,2 @@ +[ +] diff --git a/src/main/resources/META-INF/native-image/reflect-config.json b/src/main/resources/META-INF/native-image/reflect-config.json new file mode 100644 index 0000000..7d8e8dd --- /dev/null +++ b/src/main/resources/META-INF/native-image/reflect-config.json @@ -0,0 +1,312 @@ +[ +{ + "name":"ch.qos.logback.classic.encoder.PatternLayoutEncoder", + "queryAllPublicMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.filter.ThresholdFilter", + "queryAllPublicMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"setLevel","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"ch.qos.logback.classic.joran.SerializedModelConfigurator", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.DateConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.FileOfCallerConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.LevelConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.LineOfCallerConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.LineSeparatorConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.MessageConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.ThreadConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.classic.util.DefaultJoranConfigurator", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.core.ConsoleAppender", + "queryAllPublicMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.core.FileAppender", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"ch.qos.logback.core.OutputStreamAppender", + "methods":[{"name":"setEncoder","parameterTypes":["ch.qos.logback.core.encoder.Encoder"] }] +}, +{ + "name":"ch.qos.logback.core.UnsynchronizedAppenderBase", + "methods":[{"name":"addFilter","parameterTypes":["ch.qos.logback.core.filter.Filter"] }] +}, +{ + "name":"ch.qos.logback.core.encoder.Encoder", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"ch.qos.logback.core.encoder.LayoutWrappingEncoder", + "methods":[{"name":"setParent","parameterTypes":["ch.qos.logback.core.spi.ContextAware"] }] +}, +{ + "name":"ch.qos.logback.core.filter.Filter", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"ch.qos.logback.core.pattern.PatternLayoutEncoderBase", + "methods":[{"name":"setPattern","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.core.pattern.color.CyanCompositeConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.core.rolling.RollingFileAppender", + "queryAllPublicMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"setFile","parameterTypes":["java.lang.String"] }, {"name":"setRollingPolicy","parameterTypes":["ch.qos.logback.core.rolling.RollingPolicy"] }] +}, +{ + "name":"ch.qos.logback.core.rolling.RollingPolicy", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"ch.qos.logback.core.rolling.RollingPolicyBase", + "methods":[{"name":"setFileNamePattern","parameterTypes":["java.lang.String"] }, {"name":"setParent","parameterTypes":["ch.qos.logback.core.FileAppender"] }] +}, +{ + "name":"ch.qos.logback.core.rolling.TimeBasedRollingPolicy", + "queryAllPublicMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"setMaxHistory","parameterTypes":["int"] }, {"name":"setTotalSizeCap","parameterTypes":["ch.qos.logback.core.util.FileSize"] }] +}, +{ + "name":"ch.qos.logback.core.rolling.helper.DateTokenConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"ch.qos.logback.core.spi.ContextAware", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"ch.qos.logback.core.util.FileSize", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"com.icuxika.MainApp", + "methods":[{"name":"","parameterTypes":[] }, {"name":"main","parameterTypes":["java.lang.String[]"] }] +}, +{ + "name":"com.sun.glass.ui.Screen" +}, +{ + "name":"com.sun.javafx.font.directwrite.DWFactory", + "methods":[{"name":"getFactory","parameterTypes":[] }] +}, +{ + "name":"com.sun.javafx.logging.PrintLogger", + "methods":[{"name":"createInstance","parameterTypes":[] }] +}, +{ + "name":"com.sun.javafx.logging.jfr.JFRPulseLogger", + "methods":[{"name":"createInstance","parameterTypes":[] }] +}, +{ + "name":"com.sun.javafx.scene.control.skin.Utils", + "methods":[{"name":"getResource","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"com.sun.javafx.tk.quantum.QuantumToolkit", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"com.sun.prism.GraphicsPipeline", + "methods":[{"name":"getFontFactory","parameterTypes":[] }, {"name":"getPipeline","parameterTypes":[] }] +}, +{ + "name":"com.sun.prism.shader.FillCircle_Color_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, +{ + "name":"com.sun.prism.shader.FillPgram_Color_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, +{ + "name":"com.sun.prism.shader.Solid_Color_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, +{ + "name":"com.sun.prism.shader.Solid_TextureFirstPassLCD_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, +{ + "name":"com.sun.prism.shader.Solid_TextureRGB_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, +{ + "name":"com.sun.prism.shader.Solid_TextureSecondPassLCD_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, +{ + "name":"com.sun.prism.shader.Texture_Color_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, +{ + "name":"java.io.FilePermission" +}, +{ + "name":"java.lang.Character", + "methods":[{"name":"isIdeographic","parameterTypes":["int"] }] +}, +{ + "name":"java.lang.Class", + "methods":[{"name":"forName","parameterTypes":["java.lang.Module","java.lang.String"] }, {"name":"getModule","parameterTypes":[] }] +}, +{ + "name":"java.lang.Module", + "methods":[{"name":"getDescriptor","parameterTypes":[] }, {"name":"getLayer","parameterTypes":[] }, {"name":"getName","parameterTypes":[] }] +}, +{ + "name":"java.lang.ModuleLayer", + "methods":[{"name":"boot","parameterTypes":[] }, {"name":"findModule","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"java.lang.RuntimePermission" +}, +{ + "name":"java.net.NetPermission" +}, +{ + "name":"java.net.SocketPermission" +}, +{ + "name":"java.net.URLPermission", + "methods":[{"name":"","parameterTypes":["java.lang.String","java.lang.String"] }] +}, +{ + "name":"java.nio.ByteBuffer", + "methods":[{"name":"order","parameterTypes":["java.nio.ByteOrder"] }] +}, +{ + "name":"java.nio.ByteOrder", + "methods":[{"name":"nativeOrder","parameterTypes":[] }] +}, +{ + "name":"java.security.AllPermission" +}, +{ + "name":"java.security.SecurityPermission" +}, +{ + "name":"java.util.PropertyPermission" +}, +{ + "name":"java.util.concurrent.atomic.AtomicBoolean", + "fields":[{"name":"value"}] +}, +{ + "name":"java.util.concurrent.atomic.AtomicReference", + "fields":[{"name":"value"}] +}, +{ + "name":"javafx.animation.KeyValue" +}, +{ + "name":"javafx.scene.Camera" +}, +{ + "name":"javafx.scene.Node" +}, +{ + "name":"javafx.scene.ParallelCamera" +}, +{ + "name":"javafx.scene.Parent" +}, +{ + "name":"javafx.scene.Scene" +}, +{ + "name":"javafx.scene.control.Control" +}, +{ + "name":"javafx.scene.image.Image" +}, +{ + "name":"javafx.scene.layout.Pane" +}, +{ + "name":"javafx.scene.layout.Region" +}, +{ + "name":"javafx.scene.shape.Circle" +}, +{ + "name":"javafx.scene.shape.Rectangle" +}, +{ + "name":"javafx.scene.shape.Shape" +}, +{ + "name":"javafx.scene.text.Font" +}, +{ + "name":"javafx.scene.text.Text" +}, +{ + "name":"javafx.scene.transform.Transform" +}, +{ + "name":"javafx.stage.Stage" +}, +{ + "name":"javafx.stage.Window" +}, +{ + "name":"javax.smartcardio.CardPermission" +}, +{ + "name":"sun.misc.Unsafe", + "fields":[{"name":"theUnsafe"}] +}, +{ + "name":"sun.security.provider.MD5", + "methods":[{"name":"","parameterTypes":[] }] +} +] diff --git a/src/main/resources/META-INF/native-image/resource-config.json b/src/main/resources/META-INF/native-image/resource-config.json new file mode 100644 index 0000000..3f41e29 --- /dev/null +++ b/src/main/resources/META-INF/native-image/resource-config.json @@ -0,0 +1,152 @@ +{ + "resources":{ + "includes":[{ + "pattern":"\\QMETA-INF/services/ch.qos.logback.classic.spi.Configurator\\E" + }, { + "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E" + }, { + "pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/javax.xml.parsers.SAXParserFactory\\E" + }, { + "pattern":"\\QMETA-INF/services/org.slf4j.spi.SLF4JServiceProvider\\E" + }, { + "pattern":"\\Qlogback-test.scmo\\E" + }, { + "pattern":"\\Qlogback-test.xml\\E" + }, { + "pattern":"\\Qlogback.scmo\\E" + }, { + "pattern":"\\Qlogback.xml\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/ubidi.icu\\E" + }, { + "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/modena/modena.bss\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-console-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-console-l1-2-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-datetime-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-debug-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-errorhandling-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-file-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-file-l1-2-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-file-l2-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-handle-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-heap-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-interlocked-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-libraryloader-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-localization-l1-2-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-memory-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-namedpipe-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-processenvironment-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-processthreads-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-processthreads-l1-1-1.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-profile-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-rtlsupport-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-string-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-synch-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-synch-l1-2-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-sysinfo-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-timezone-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-core-util-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-conio-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-convert-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-environment-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-filesystem-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-heap-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-locale-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-math-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-multibyte-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-private-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-process-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-runtime-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-stdio-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-string-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-time-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qapi-ms-win-crt-utility-l1-1-0.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/glass/utils/NativeLibLoader.class\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/d3d/hlsl/FillCircle_Color.obj\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/d3d/hlsl/FillPgram_Color.obj\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/d3d/hlsl/Solid_Color.obj\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/d3d/hlsl/Solid_TextureFirstPassLCD.obj\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/d3d/hlsl/Solid_TextureRGB.obj\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/d3d/hlsl/Solid_TextureSecondPassLCD.obj\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/d3d/hlsl/Texture_Color.obj\\E" + }, { + "pattern":"javafx.graphics:\\Qglass.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qjavafx_font.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qmsvcp140.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qmsvcp140_1.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qmsvcp140_2.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qprism_d3d.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qucrtbase.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qvcruntime140.dll\\E" + }, { + "pattern":"javafx.graphics:\\Qvcruntime140_1.dll\\E" + }]}, + "bundles":[{ + "name":"LanguageResource", + "locales":["", "en", "zh-CN"] + }, { + "name":"com.sun.javafx.tk.quantum.QuantumMessagesBundle", + "locales":["", "zh-CN"] + }, { + "name":"com/sun/glass/ui/win/themes", + "locales":["", "zh-CN"] + }] +} diff --git a/src/main/resources/META-INF/native-image/serialization-config.json b/src/main/resources/META-INF/native-image/serialization-config.json new file mode 100644 index 0000000..f3d7e06 --- /dev/null +++ b/src/main/resources/META-INF/native-image/serialization-config.json @@ -0,0 +1,8 @@ +{ + "types":[ + ], + "lambdaCapturingTypes":[ + ], + "proxies":[ + ] +} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..9a0ac7e --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,29 @@ + + + + + %highlight(%-5level) %boldGreen(%d{yyyy-MM-dd HH:mm:ss.SSS}) %boldYellow([%thread]) %cyan([%F:%L]) - %highlight(%msg%n) + + + + + + logs/application.log + + INFO + + + logs/rolling/application.%d{yyyy-MM-dd}.log + 30 + 3GB + + + %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%F:%L] %msg%n + + + + + + + + \ No newline at end of file