diff --git a/.gitignore b/.gitignore index 1be5131b1bc726ba4e03a73f6fa61fc3fc13458b..0aacdeaa12de0d0cf0497a75f078f301d71e7103 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ devLibs system_plugin_list.json RUNNING_PID -gradle +#gradle .gradle build out diff --git a/README.md b/README.md index 1872cd1c8bfaa4f52c33a739d33caaa5a5164343..93ed6f413b6962a351090fd681dc0387e4e78a79 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ xJavaFxTool是使用javaFx开发的实用小工具集,利用业余时间把工 - [相关小游戏](https://gitee.com/xwintop/xJavaFxTool-Games) #### 环境搭建说明: -- 开发环境为jdk17,基于maven3.6.3构建 +- 开发环境为jdk17,基于gradle8.5构建 - 使用eclipase或Intellij Idea开发,推荐使用[Intellij Idea](https://www.jetbrains.com/idea/?from=xJavaFxTool) - 本项目使用了[lombok](https://projectlombok.org/),在查看本项目时如果您没有下载lombok 插件,请先安装,不然找不到get/set等方法 - 依赖的[xcore包](https://gitee.com/xwintop/xcore)已上传至git托管的maven平台,git托管maven可参考教程(若无法下载请拉取项目自行编译)。[教程地址:点击进入](http://blog.csdn.net/u011747754/article/details/78574026) diff --git a/build.gradle b/build.gradle index d1d0c8965e5cbe2ad7095c18feb95b8013e64539..165e866d5d36916a670f5a5f13a52ccf45559cfd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,26 +1,24 @@ -buildscript { - repositories { - mavenCentral() - maven { - allowInsecureProtocol = true - url "https://plugins.gradle.org/m2/" - } - } +//buildscript { +// repositories { +// mavenCentral() +// maven { +// allowInsecureProtocol = true +// url "https://plugins.gradle.org/m2/" +// } +// } // dependencies { // classpath 'org.openjfx:javafx-plugin:0.1.0' // } -} +//} plugins { id "org.gradlex.extra-java-module-info" version "1.7" -// id "org.beryx.jlink" version "2.26.0" id "org.openjfx.javafxplugin" version "0.1.0" - id "com.gluonhq.gluonfx-gradle-plugin" version "1.0.22" id 'idea' id 'application' id 'maven-publish' } -allprojects { +subprojects { ext { springBootVersion = "2.7.18" } @@ -30,7 +28,7 @@ allprojects { apply plugin: 'application' apply plugin: 'maven-publish' // 引入maven插件 apply plugin: 'org.openjfx.javafxplugin' - sourceCompatibility = 17 +// sourceCompatibility = 17 test {//跳过测试 enabled = false } @@ -58,16 +56,16 @@ allprojects { annotationProcessor 'org.projectlombok:lombok:1.18.30' testCompileOnly 'org.projectlombok:lombok:1.18.30' testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' -// api 'org.openjfx:javafx-controls:21.0.1' -// api 'org.openjfx:javafx-base:21.0.1' -// api 'org.openjfx:javafx-graphics:21.0.1' -// api 'org.openjfx:javafx-fxml:21.0.1' -// api 'org.openjfx:javafx-swing:21.0.1' -// api 'org.openjfx:javafx-media:21.0.1' -// api 'org.openjfx:javafx-web:21.0.1' +// api 'org.openjfx:javafx-controls:21.0.2' +// api 'org.openjfx:javafx-base:21.0.2' +// api 'org.openjfx:javafx-graphics:21.0.2' +// api 'org.openjfx:javafx-fxml:21.0.2' +// api 'org.openjfx:javafx-swing:21.0.2' +// api 'org.openjfx:javafx-media:21.0.2' +// api 'org.openjfx:javafx-web:21.0.2' } javafx { - version = "21.0.1" + version = "21.0.2" modules = ['javafx.controls', "javafx.graphics", 'javafx.fxml', 'javafx.media', 'javafx.swing', 'javafx.web'] // configuration = 'compileOnly' } diff --git a/debugTools/x-RedisTool/src/main/java/com/xwintop/xJavaFxTool/RedisToolMain.java b/debugTools/x-RedisTool/src/main/java/com/xwintop/xJavaFxTool/RedisToolMain.java index 3a9de9e6e9d5b3036ab856512ddf1807af6132e0..81ad58de1f81efb2763c04d2dc144ca4a8853735 100644 --- a/debugTools/x-RedisTool/src/main/java/com/xwintop/xJavaFxTool/RedisToolMain.java +++ b/debugTools/x-RedisTool/src/main/java/com/xwintop/xJavaFxTool/RedisToolMain.java @@ -1,6 +1,6 @@ package com.xwintop.xJavaFxTool; -import com.xwintop.xJavaFxTool.utils.VersionChecker; +import com.xwintop.xcore.util.VersionChecker; import com.xwintop.xcore.util.javafx.JavaFxSystemUtil; import javafx.application.Application; import javafx.event.EventHandler; diff --git a/debugTools/x-ZookeeperTool/src/test/java/com/xwintop/xJavaFxPlugIn/AppTest.java b/debugTools/x-ZookeeperTool/src/test/java/com/xwintop/xJavaFxPlugIn/AppTest.java deleted file mode 100644 index b29f6bc75877b88abdbd644d2597569eaf437ca6..0000000000000000000000000000000000000000 --- a/debugTools/x-ZookeeperTool/src/test/java/com/xwintop/xJavaFxPlugIn/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xwintop.xJavaFxPlugIn; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/developTools/x-PathWatchTool/src/main/java/com/xwintop/xJavaFxTool/services/developTools/PathWatchToolService.java b/developTools/x-PathWatchTool/src/main/java/com/xwintop/xJavaFxTool/services/developTools/PathWatchToolService.java index c8d57ffce4b6318e10515e52b765e55c9fe2c8be..8e861195e1cbc87ee156e7f5c10a5e2f055d60e8 100644 --- a/developTools/x-PathWatchTool/src/main/java/com/xwintop/xJavaFxTool/services/developTools/PathWatchToolService.java +++ b/developTools/x-PathWatchTool/src/main/java/com/xwintop/xJavaFxTool/services/developTools/PathWatchToolService.java @@ -47,7 +47,7 @@ public class PathWatchToolService { return; } if (thread != null) { - thread.stop(); + thread.interrupt(); } boolean fileNameSRegex = pathWatchToolController.getFileNameSupportRegexCheckBox().isSelected(); String fileNameContains = pathWatchToolController.getFileNameContainsTextField().getText(); @@ -138,7 +138,7 @@ public class PathWatchToolService { public void stopWatchAction() { if (thread != null) { - thread.stop(); + thread.interrupt(); thread = null; } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7f93135c49b765f8051ef9d0a6055ff8e46073d8 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..1af9e0930b89b3294ea6a195f0808aafd36fafe8 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/javaFxTools/x-JavaFxXmlToObjectCode/src/test/java/com/xwintop/xJavaFxTool/javafx/tool/TableBeanTool.java b/javaFxTools/x-JavaFxXmlToObjectCode/src/test/java/com/xwintop/xJavaFxTool/javafx/tool/TableBeanTool.java index 038af88ab71cf9d3e55d8390092b10cc963681f9..ef219273a7d083b6b85dadb5d18de358d15e5d46 100644 --- a/javaFxTools/x-JavaFxXmlToObjectCode/src/test/java/com/xwintop/xJavaFxTool/javafx/tool/TableBeanTool.java +++ b/javaFxTools/x-JavaFxXmlToObjectCode/src/test/java/com/xwintop/xJavaFxTool/javafx/tool/TableBeanTool.java @@ -1,8 +1,8 @@ package com.xwintop.xJavaFxTool.javafx.tool; -import com.xwintop.xcore.util.StrUtil; +import cn.hutool.core.util.StrUtil; import org.apache.commons.lang3.reflect.FieldUtils; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.lang.reflect.Field; @@ -27,7 +27,7 @@ public class TableBeanTool { String typeName = field.getType().getSimpleName(); String typeSimpleName = typeName.substring(6, typeName.indexOf("Property")); String typeClassName = typeName.substring(6); - String UpFieldName = StrUtil.firstToUpCase(fieldName); + String UpFieldName = StrUtil.upperFirst(fieldName); stringBuffer.append(typeSimpleName).append(" "+fieldName+","); stringBuffer2.append("this."+fieldName+" = new "+typeName+"("+fieldName+");\n"); diff --git a/littleTools/x-BookManageSystem/src/test/java/com/xwintop/xJavaFxPlugIn/AppTest.java b/littleTools/x-BookManageSystem/src/test/java/com/xwintop/xJavaFxPlugIn/AppTest.java deleted file mode 100644 index b29f6bc75877b88abdbd644d2597569eaf437ca6..0000000000000000000000000000000000000000 --- a/littleTools/x-BookManageSystem/src/test/java/com/xwintop/xJavaFxPlugIn/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xwintop.xJavaFxPlugIn; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/littleTools/x-ImageTool/src/main/resources/config/toolFxmlLoaderConfiguration.xml b/littleTools/x-ImageTool/src/main/resources/config/toolFxmlLoaderConfiguration.xml index 835052ac9f9913f65cd60fc3320e0ce3f5c8a69e..d557c1b0bf169e69fcf9530b120aa0afaeb04160 100644 --- a/littleTools/x-ImageTool/src/main/resources/config/toolFxmlLoaderConfiguration.xml +++ b/littleTools/x-ImageTool/src/main/resources/config/toolFxmlLoaderConfiguration.xml @@ -6,7 +6,7 @@ locale.ImageTool Title - /images/ImageToolIcon.png + /images/ImageToolIcon.png p-littleTools diff --git a/netWorkTools/x-WebCronExpBuilder/src/test/java/com/xwintop/xJavaFxTool/AppTest.java b/netWorkTools/x-WebCronExpBuilder/src/test/java/com/xwintop/xJavaFxTool/AppTest.java deleted file mode 100644 index a56354694f619b61227337ce23fa33137468a85d..0000000000000000000000000000000000000000 --- a/netWorkTools/x-WebCronExpBuilder/src/test/java/com/xwintop/xJavaFxTool/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xwintop.xJavaFxTool; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/netWorkTools/x-WebJsonEditor/src/test/java/com/xwintop/xJavaFxTool/AppTest.java b/netWorkTools/x-WebJsonEditor/src/test/java/com/xwintop/xJavaFxTool/AppTest.java deleted file mode 100644 index a56354694f619b61227337ce23fa33137468a85d..0000000000000000000000000000000000000000 --- a/netWorkTools/x-WebJsonEditor/src/test/java/com/xwintop/xJavaFxTool/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xwintop.xJavaFxTool; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/settings.gradle b/settings.gradle index 4b8cbb6f40dfc69e256fba6f4ede88aa8749f47a..df0deba513bbd9fe28d3d8f1fbe03b8193833dca 100644 --- a/settings.gradle +++ b/settings.gradle @@ -41,7 +41,7 @@ include("debugTools:x-FtpServer") include("debugTools:x-HbaseTool") include("debugTools:x-HttpTool") include("debugTools:x-KafkaTool") -include("debugTools:x-KeyTool") +//include("debugTools:x-KeyTool") include("debugTools:x-RedisTool") include("debugTools:x-ScriptEngineTool") include("debugTools:x-ZookeeperTool") diff --git a/xJavaFxTool/build.gradle b/xJavaFxTool/build.gradle index a48120547c14d683d2cb36150d4c5b10ffe4c5a8..c9cd67bcfd36360725203803b19b4bb09f31892f 100644 --- a/xJavaFxTool/build.gradle +++ b/xJavaFxTool/build.gradle @@ -1,85 +1,100 @@ +buildscript { + repositories { + mavenCentral() + maven { + allowInsecureProtocol = true + url "https://sandec.jfrog.io/artifactory/repo" + } + } + + dependencies { + classpath "one.jpro:jpro-gradle-plugin:2024.1.0" + } +} plugins { // id "org.beryx.jlink" version "2.26.0" id 'org.beryx.runtime' version '1.12.7' - id "org.openjfx.javafxplugin" version "0.1.0" id "com.gluonhq.gluonfx-gradle-plugin" version "1.0.22" } +apply plugin: 'jpro-gradle-plugin' + dependencies { api project(':xcore') + implementation "com.sandec.jpro:jpro-webapi:2024.1.0" api project(":littleTools:x-EncryptAndDecrypt") - api project(":littleTools:x-ZHConverter") - api project(":littleTools:x-ImageTool") - api project(":littleTools:x-IconTool") - api project(":littleTools:x-PdfConvertTool") - api project(":littleTools:x-QRCodeBuilder") - api project(":littleTools:x-FileCopy") - api project(":littleTools:x-FileMergeTool") - api project(":littleTools:x-TimeTool") - api project(":littleTools:x-CharacterConverter") - api project(":littleTools:x-BookManageSystem") - api project(":littleTools:x-CoordinateTransformTool") - api project(":littleTools:x-ElementaryArithmeticProblemTool") - api project(":littleTools:x-CronExpBuilder") - api project(":littleTools:x-EmailTool") - api project(":littleTools:x-ExcelSplitTool") - api project(":littleTools:x-FileBuildTool") - api project(":littleTools:x-FileCompressTool") - api project(":littleTools:x-FileRenameTool") - api project(":littleTools:x-FileSearchTool") - api project(":littleTools:x-HdfsTool") - api project(":littleTools:x-ImageAnalysisTool") - api project(":littleTools:x-JavaService") - api project(":littleTools:x-LinuxPathToWindowsPath") - api project(":littleTools:x-Mp3ConvertTool") - api project(":littleTools:x-RelationshipCalculator") - api project(":littleTools:x-SealBuilderTool") - api project(":littleTools:x-SedentaryReminderTool") - api project(":littleTools:x-SmsTool") - api project(":debugTools:x-CmdTool") - api project(":debugTools:x-ScanPortTool") - api project(":debugTools:x-SwitchHostsTool") - api project(":debugTools:x-SocketTool") - api project(":debugTools:x-ActiveMqTool") - api project(":debugTools:x-ExpressionParserTool") - api project(":debugTools:x-FtpClientTool") - api project(":debugTools:x-FtpServer") - api project(":debugTools:x-HbaseTool") - api project(":debugTools:x-HttpTool") - api project(":debugTools:x-KafkaTool") -// api project(":debugTools:x-KeyTool") - api project(":debugTools:x-RedisTool") - api project(":debugTools:x-ScriptEngineTool") - api project(":debugTools:x-ZookeeperTool") - api project(":codeTools:x-RegexTester") - api project(":codeTools:x-RandomGeneratorTool") - api project(":codeTools:x-IdCardGenerator") - api project(":codeTools:x-CharsetDetectTool") - api project(":codeTools:x-ColorCodeConverterTool") - api project(":codeTools:x-EscapeCharacter") - api project(":codeTools:x-FileUnicodeTransformationTool") - api project(":codeTools:x-WebSourcesTool") - api project(":developTools:x-AsciiPicTool") - api project(":developTools:x-JsonConvertTool") - api project(":developTools:x-ClipboardHistoryTool") - api project(":developTools:x-DirectoryTreeTool") - api project(":developTools:x-LuytenTool") - api project(":developTools:x-PathWatchTool") - api project(":assistTools:x-TextToSpeechTool") - api project(":assistTools:x-DecompilerWxApkgTool") - api project(":assistTools:x-IdiomDataTool") - api project(":assistTools:x-WechatJumpGameTool") - api project(":games:x-X2048") - api project(":games:x-BullsAndCowsGame") - api project(":games:x-Sudoku") - api project(":games:x-ChineseChess") - api project(":games:x-SnakeJavaFx") - api project(":games:x-pet") - api project(":javaFxTools:x-JavaFxXmlToObjectCode") - api project(":javaFxTools:x-ShowSystemInfo") - api project(":webTools:x-ShortURL") - api project(":netWorkTools:x-WebCronExpBuilder") - api project(":netWorkTools:x-WebJsonEditor") +// api project(":littleTools:x-ZHConverter") +// api project(":littleTools:x-ImageTool") +// api project(":littleTools:x-IconTool") +// api project(":littleTools:x-PdfConvertTool") +// api project(":littleTools:x-QRCodeBuilder") +// api project(":littleTools:x-FileCopy") +// api project(":littleTools:x-FileMergeTool") +// api project(":littleTools:x-TimeTool") +// api project(":littleTools:x-CharacterConverter") +// api project(":littleTools:x-BookManageSystem") +// api project(":littleTools:x-CoordinateTransformTool") +// api project(":littleTools:x-ElementaryArithmeticProblemTool") +// api project(":littleTools:x-CronExpBuilder") +// api project(":littleTools:x-EmailTool") +// api project(":littleTools:x-ExcelSplitTool") +// api project(":littleTools:x-FileBuildTool") +// api project(":littleTools:x-FileCompressTool") +// api project(":littleTools:x-FileRenameTool") +// api project(":littleTools:x-FileSearchTool") +// api project(":littleTools:x-HdfsTool") +// api project(":littleTools:x-ImageAnalysisTool") +// api project(":littleTools:x-JavaService") +// api project(":littleTools:x-LinuxPathToWindowsPath") +// api project(":littleTools:x-Mp3ConvertTool") +// api project(":littleTools:x-RelationshipCalculator") +// api project(":littleTools:x-SealBuilderTool") +// api project(":littleTools:x-SedentaryReminderTool") +// api project(":littleTools:x-SmsTool") +// api project(":debugTools:x-CmdTool") +// api project(":debugTools:x-ScanPortTool") +// api project(":debugTools:x-SwitchHostsTool") +// api project(":debugTools:x-SocketTool") +// api project(":debugTools:x-ActiveMqTool") +// api project(":debugTools:x-ExpressionParserTool") +// api project(":debugTools:x-FtpClientTool") +// api project(":debugTools:x-FtpServer") +// api project(":debugTools:x-HbaseTool") +// api project(":debugTools:x-HttpTool") +// api project(":debugTools:x-KafkaTool") +//// api project(":debugTools:x-KeyTool") +// api project(":debugTools:x-RedisTool") +// api project(":debugTools:x-ScriptEngineTool") +// api project(":debugTools:x-ZookeeperTool") +// api project(":codeTools:x-RegexTester") +// api project(":codeTools:x-RandomGeneratorTool") +// api project(":codeTools:x-IdCardGenerator") +// api project(":codeTools:x-CharsetDetectTool") +// api project(":codeTools:x-ColorCodeConverterTool") +// api project(":codeTools:x-EscapeCharacter") +// api project(":codeTools:x-FileUnicodeTransformationTool") +// api project(":codeTools:x-WebSourcesTool") +// api project(":developTools:x-AsciiPicTool") +// api project(":developTools:x-JsonConvertTool") +// api project(":developTools:x-ClipboardHistoryTool") +// api project(":developTools:x-DirectoryTreeTool") +// api project(":developTools:x-LuytenTool") +// api project(":developTools:x-PathWatchTool") +// api project(":assistTools:x-TextToSpeechTool") +// api project(":assistTools:x-DecompilerWxApkgTool") +// api project(":assistTools:x-IdiomDataTool") +// api project(":assistTools:x-WechatJumpGameTool") +// api project(":games:x-X2048") +// api project(":games:x-BullsAndCowsGame") +// api project(":games:x-Sudoku") +// api project(":games:x-ChineseChess") +// api project(":games:x-SnakeJavaFx") +// api project(":games:x-pet") +// api project(":javaFxTools:x-JavaFxXmlToObjectCode") +// api project(":javaFxTools:x-ShowSystemInfo") +// api project(":webTools:x-ShortURL") +// api project(":netWorkTools:x-WebCronExpBuilder") +// api project(":netWorkTools:x-WebJsonEditor") } group = 'com.xwintop' @@ -87,13 +102,13 @@ version = '1.2.3' description = 'xJavaFxTool' compileJava { - options.compilerArgs += ['--module-path', classpath.asPath] +// options.compilerArgs += ['--module-path', classpath.asPath] } application { applicationName = "xJavaFxTool" mainModule.set("com.xwintop.xJavaFxTool") - mainClass.set("com.xwintop.xJavaFxTool.XJavaFxToolMain") + mainClass.set("com.xwintop.xJavaFxTool.XJavaFxToolApplication") applicationDefaultJvmArgs = [ // ZGC "-XX:+UseZGC", @@ -159,4 +174,12 @@ runtime { // installerName = application.applicationName // appVersion = version.toString() // } -//} \ No newline at end of file +//} + +gluonfx { + mainClassName = "com.xwintop.xJavaFxTool.XJavaFxToolMain" +} + +jpro { + port = 8080 +} \ No newline at end of file diff --git a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/XJavaFxToolApplication.java b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/XJavaFxToolApplication.java index 13eb18865fcb9f1a45b89f801181a00a27f120d3..9d636be6fc26a1c2b1fb6fc315db9253a5673165 100644 --- a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/XJavaFxToolApplication.java +++ b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/XJavaFxToolApplication.java @@ -15,10 +15,10 @@ import com.xwintop.xJavaFxTool.controller.IndexController; import com.xwintop.xJavaFxTool.utils.Config; import com.xwintop.xJavaFxTool.utils.Config.Keys; import com.xwintop.xJavaFxTool.utils.StageUtils; -import com.xwintop.xJavaFxTool.utils.VersionChecker; import com.xwintop.xJavaFxTool.utils.XJavaFxSystemUtil; import com.xwintop.xcore.javafx.FxApp; import com.xwintop.xcore.javafx.dialog.FxAlerts; +import com.xwintop.xcore.util.VersionChecker; import javafx.application.Application; import javafx.application.Platform; import javafx.event.Event; @@ -70,7 +70,7 @@ public class XJavaFxToolApplication extends Application { loadClassicUI(primaryStage); StageUtils.loadPrimaryStageBound(primaryStage); - primaryStage.setOnShown(windowEvent -> VersionChecker.checkNewVersion()); + primaryStage.setOnShown(windowEvent -> VersionChecker.checkerVersion("https://gitee.com/api/v5/repos/xwintop/xJavaFxTool/releases/latest", "https://gitee.com/xwintop/xJavaFxTool/releases", Config.xJavaFxToolVersions.substring(1))); primaryStage.show(); } diff --git a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/controller/IndexController.java b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/controller/IndexController.java index a436273816cf93f6b0ef0317484cb3d23558897b..b1214ce0c9148e1055a64cdf65c2e35b29142734 100644 --- a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/controller/IndexController.java +++ b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/controller/IndexController.java @@ -1,5 +1,7 @@ package com.xwintop.xJavaFxTool.controller; +import com.jpro.webapi.HTMLView; +import com.jpro.webapi.WebAPI; import com.xwintop.xJavaFxTool.XJavaFxToolApplication; import com.xwintop.xJavaFxTool.controller.index.PluginManageController; import com.xwintop.xJavaFxTool.controller.plugin.PluginCategoryController; @@ -12,12 +14,12 @@ import com.xwintop.xJavaFxTool.plugin.PluginParser; import com.xwintop.xJavaFxTool.services.IndexService; import com.xwintop.xJavaFxTool.services.index.SystemSettingService; import com.xwintop.xJavaFxTool.utils.Config; -import com.xwintop.xJavaFxTool.utils.VersionChecker; import com.xwintop.xJavaFxTool.view.IndexView; import com.xwintop.xcore.javafx.FxApp; import com.xwintop.xcore.javafx.dialog.FxAlerts; import com.xwintop.xcore.javafx.dialog.FxDialog; import com.xwintop.xcore.util.ConfigureUtil; +import com.xwintop.xcore.util.VersionChecker; import com.xwintop.xcore.util.javafx.AlertUtil; import com.xwintop.xcore.util.javafx.JavaFxSystemUtil; import javafx.application.Platform; @@ -29,6 +31,8 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.Tab; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.web.WebEngine; +import javafx.scene.web.WebView; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -82,7 +86,15 @@ public class IndexController extends IndexView { addNodepadAction(null); } this.indexService.addWebView(XJavaFxToolApplication.RESOURCE_BUNDLE.getString("feedback"), QQ_URL, null); - this.tongjiWebView.getEngine().load(STATISTICS_URL); + if (WebAPI.isBrowser()) { + String contentIframe2 = ""; + HTMLView browser = new HTMLView(contentIframe2); + pluginCategories.getChildren().add(browser); + } else { + WebView browser = new WebView(); + WebEngine webEngine = browser.getEngine(); + webEngine.load(STATISTICS_URL); + } this.tabPaneMain.getSelectionModel().select(0); } @@ -93,6 +105,7 @@ public class IndexController extends IndexView { private void initService() { PluginManager pluginManager = PluginManager.getInstance(); + pluginManager.loadDevPluginConfiguration(); pluginManager.loadLocalDevPluginConfiguration(); loadPlugins(); // 加载插件列表到界面上 AppEvents.addEventHandler(PluginEvent.PLUGIN_DOWNLOADED, pluginEvent -> loadPlugins()); @@ -112,6 +125,7 @@ public class IndexController extends IndexView { pluginManager.loadLocalPlugins(); pluginManager.getEnabledPluginList().forEach(this::loadPlugin); pluginManager.getDevPluginList().forEach(this::loadPlugin); + pluginManager.getLocalDevPluginList().forEach(this::loadPlugin); } /** @@ -135,8 +149,8 @@ public class IndexController extends IndexView { } String categoryName = jarInfo.getIsFavorite() ? FAVORITE_CATEGORY_NAME : XJavaFxToolApplication.RESOURCE_BUNDLE.getString(menuParentTitle); PluginCategoryController category = categoryControllers.computeIfAbsent( - categoryName, __ -> { - PluginCategoryController _category = PluginCategoryController.newInstance(categoryName); + categoryName, key -> { + PluginCategoryController _category = PluginCategoryController.newInstance(key); addCategory(_category); return _category; } @@ -232,9 +246,7 @@ public class IndexController extends IndexView { @FXML private void checkerVersionAction() { - if (!VersionChecker.checkNewVersion()) { - FxAlerts.info("提示", "已经是新版本"); - } + VersionChecker.checkerVersion("https://gitee.com/api/v5/repos/xwintop/xJavaFxTool/releases/latest","https://gitee.com/xwintop/xJavaFxTool/releases",Config.xJavaFxToolVersions.substring(1)); } @FXML diff --git a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginManager.java b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginManager.java index df1dc5ba31de01dd376ab9409d14e085f4ecf2a4..fa14e5f66df98f56ce5e65c1dfb9cea158c23b74 100644 --- a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginManager.java +++ b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginManager.java @@ -5,14 +5,17 @@ import com.xwintop.xJavaFxTool.model.PluginJarInfo; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; import java.io.File; import java.io.IOException; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Enumeration; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -35,6 +38,8 @@ public class PluginManager { private final List devPluginList = new ArrayList<>(); // dev插件列表 + private final List localDevPluginList = new ArrayList<>(); // 本地开发插件列表 + public PluginManager() { this.loadLocalPluginConfiguration(); } @@ -68,7 +73,8 @@ public class PluginManager { } } - public void loadLocalDevPluginConfiguration() { + //加载开发libs包中插件 + public void loadDevPluginConfiguration() { try { // 系统类库路径 File libPath = new File("devLibs/"); @@ -89,7 +95,34 @@ public class PluginManager { } } } catch (Exception e) { - log.error("添加libs中jar包到系统中异常:", e); + log.error("添加devLibs中jar包到系统中异常:", e); + } + } + + //加载本地开发插件 + public void loadLocalDevPluginConfiguration() { + try { + Enumeration urlEnumeration = getClass().getClassLoader().getResources("config/toolFxmlLoaderConfiguration.xml"); + while (urlEnumeration.hasMoreElements()) { + URL url = urlEnumeration.nextElement(); + System.out.println(url.getPath()); +// if (!url.getPath().endsWith("x-FileUnicodeTransformationTool/out/production/resources/config/toolFxmlLoaderConfiguration.xml")) { +// continue; +// } +// System.out.println(FileUtils.readFileToString(new File(url.getFile()))); + try { + PluginJarInfo plugin = new PluginJarInfo(); + plugin.setLocalPath(StringUtils.removeEnd(url.getPath(), "/config/toolFxmlLoaderConfiguration.xml")); + plugin.setIsEnable(true); + plugin.setIsDownload(true); + PluginParser.parse(url, plugin); + localDevPluginList.add(plugin); + } catch (Exception e) { + log.error("解析失败", e); + } + } + } catch (Exception e) { + log.error("添加子模块到系统中异常:", e); } } @@ -105,6 +138,7 @@ public class PluginManager { PluginParser.initParse(pluginFile, plugin); } catch (Exception e) { log.error("解析失败", e); + removeList.add(plugin); } } else { removeList.add(plugin); @@ -155,7 +189,7 @@ public class PluginManager { try { saveToFile(); } catch (IOException e) { - log.error("", e); + log.error("saveToFile error", e); } } } diff --git a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginParser.java b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginParser.java index fa1a2bdfabdcaeecc45e2b63437e2d32f3bffea3..fcad78de3fbefc0e8228db2003df13799de01ee9 100644 --- a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginParser.java +++ b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/plugin/PluginParser.java @@ -14,6 +14,7 @@ import org.dom4j.io.SAXReader; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -90,6 +91,53 @@ public class PluginParser { } } + public static void parse(URL pluginConfigUrl, PluginJarInfo pluginJarInfo) { + try { + File pluginConfigFile = new File(pluginConfigUrl.getFile()); + ClassLoader classLoader = PluginClassLoader.create(pluginConfigFile); +// FileUtils.readFileToString(new File(url.getFile())); + SAXReader saxReader = new SAXReader(); + Document document = saxReader.read(new File(pluginConfigUrl.getFile())); + Element root = document.getRootElement(); + List menuElements = selectElements(root, "/root/ToolFxmlLoaderConfiguration[@isMenu='true']"); + Element pluginElement = selectSingleElement(root, "/root/ToolFxmlLoaderConfiguration[not(@isMenu)]"); + + Map menuTitles = new HashMap<>(); + for (Element menuElement : menuElements) { + menuTitles.put(menuElement.attributeValue("menuId"), menuElement.attributeValue("title")); + } + + String resourceBundleName = getChildNodeText(pluginElement, "resourceBundleName"); + String title = getTitleFromResourceBundle(new File(pluginJarInfo.getLocalPath()), classLoader, pluginElement, resourceBundleName); + String menuId = getChildNodeText(pluginElement, "menuParentId"); + String url = getChildNodeText(pluginElement, "url"); + String controllerType = getChildNodeText(pluginElement, "controllerType"); + String menuTitle = menuTitles.get(menuId); + + pluginJarInfo.setMenuParentId(menuId); + pluginJarInfo.setMenuParentTitle(menuTitle); + pluginJarInfo.setBundleName(resourceBundleName); + pluginJarInfo.setControllerType(controllerType); + pluginJarInfo.setTitle(title); + pluginJarInfo.setIconPath(pluginElement.elementTextTrim("iconPath")); + if (StringUtils.isNotBlank(pluginJarInfo.getIconPath())) { +// Image iconImage = new Image(new FileInputStream(pluginJarInfo.getLocalPath() + pluginJarInfo.getIconPath())); + Image iconImage = new Image(classLoader.getResourceAsStream(StringUtils.removeStart(pluginJarInfo.getIconPath(),"/"))); + pluginJarInfo.setIconImage(iconImage); + } + + if (controllerType.equals("Node")) { + pluginJarInfo.setFxmlPath(url); + } else if (controllerType.equals("WebView")) { + pluginJarInfo.setPagePath(url); + } + + pluginJarInfo.setName(StringUtils.defaultString(pluginJarInfo.getName(), title)); + } catch (Exception e) { + throw new AppException(e); + } + } + //简单解析插件信息 public static void initParse(File pluginFile, PluginJarInfo pluginJarInfo) { try (JarFile jarFile = new JarFile(pluginFile)) { diff --git a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/services/IndexService.java b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/services/IndexService.java index 176d386a2cb993193509e11301e3ae19bc08cb78..a27db3dcd76f311c70a2eb95c14f324f85bfba2d 100644 --- a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/services/IndexService.java +++ b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/services/IndexService.java @@ -1,5 +1,7 @@ package com.xwintop.xJavaFxTool.services; +import com.jpro.webapi.HTMLView; +import com.jpro.webapi.WebAPI; import com.xwintop.xJavaFxTool.AppException; import com.xwintop.xJavaFxTool.XJavaFxToolApplication; import com.xwintop.xJavaFxTool.common.logback.ConsoleLogAppender; @@ -17,6 +19,7 @@ import javafx.event.Event; import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.scene.Node; +import javafx.scene.Parent; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; import javafx.scene.control.TextArea; @@ -29,8 +32,10 @@ import javafx.scene.web.WebView; import javafx.stage.Stage; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import java.io.IOException; import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -196,24 +201,32 @@ public class IndexService { } public static Tab loadWebViewAsTab(PluginJarInfo plugin, TabPane tabPane, boolean singleWindowBoot) { - WebView browser = new WebView(); - WebEngine webEngine = browser.getEngine(); String url = plugin.getPagePath(); String title = plugin.getTitle(); - -// HTMLView browser = null; + Parent browser = null; if (url.startsWith("http")) { - webEngine.load(url); -// String contentIframe2 = ""; -// browser = new HTMLView(contentIframe2); + if (WebAPI.isBrowser()) { + String contentIframe2 = ""; + browser = new HTMLView(contentIframe2); + } else { + browser = new WebView(); + WebEngine webEngine = ((WebView)browser).getEngine(); + webEngine.load(url); + } } else { PluginContainer pluginContainer = new PluginContainer(plugin); - webEngine.load(pluginContainer.getResource(url).toExternalForm()); -// try { -// browser = new HTMLView(IOUtils.toString(pluginContainer.getResource(url).openStream(), "utf-8")); -// } catch (IOException e) { -// throw new RuntimeException(e); -// } + if (WebAPI.isBrowser()) { + try { + browser = new HTMLView(IOUtils.toString(pluginContainer.getResource(url).openStream(), "utf-8")); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + browser = new WebView(); + WebEngine webEngine = ((WebView)browser).getEngine(); + webEngine.load(pluginContainer.getResource(url).toExternalForm()); + } + } if (singleWindowBoot) { diff --git a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/utils/VersionChecker.java b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/utils/VersionChecker.java deleted file mode 100644 index fa441819fdc6abda23ecde71edbc1e2cf1decbf9..0000000000000000000000000000000000000000 --- a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/utils/VersionChecker.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.xwintop.xJavaFxTool.utils; - -import cn.hutool.http.HttpUtil; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; -import com.xwintop.xcore.javafx.dialog.FxAlerts; -import com.xwintop.xcore.util.javafx.JavaFxSystemUtil; -import lombok.extern.slf4j.Slf4j; - -/** - * @ClassName: VersionChecker - * @Description: 新版本检查 - * @author: xufeng - * @date: 2022/3/28 14:59 - */ - -@Slf4j -public class VersionChecker { - public static boolean checkNewVersion() { - try { - String json = HttpUtil.get("https://gitee.com/api/v5/repos/xwintop/xJavaFxTool/releases/latest"); - log.info("检查新版本:" + json); - JSONObject node = JSON.parseObject(json); - final String latestVersion = node.getString("tag_name"); - final String features = node.getString("body"); - - if (latestVersion == null) { - log.info("检查新版本失败"); - return false; - } - - if (isLargerThanCurrent(latestVersion)) { - final String content = new StringBuilder() - .append("版本名:").append(node.getString("name")).append("\r\n") - .append("更新内容: \r\n").append(features) - .toString(); - if (FxAlerts.confirmOkCancel("发现新版本 " + latestVersion, content)) { - JavaFxSystemUtil.openBrowseURLThrowsException("https://gitee.com/xwintop/xJavaFxTool/releases"); - } - } else { - return false; - } - } catch (Exception e) { - log.error("检查新版本失败!", e); - } - return true; - } - - private static Boolean isLargerThanCurrent(String remoteVersion) { - final String[] arr = remoteVersion.split("v"); - String r = remoteVersion; - if (arr.length == 2) { - r = arr[1]; - } - - final String[] localVersionArr = Config.xJavaFxToolVersions.substring(1).split("\\."); - final String[] remoteVersionArr = r.split("\\."); - for (int i = 0; i < localVersionArr.length; i++) { - try { - final int localVersionSymbol = Integer.parseInt(localVersionArr[i]); - final int remoteVersionSymbol = Integer.parseInt(remoteVersionArr[i]); - if (localVersionSymbol < remoteVersionSymbol) { - return true; - } else if (localVersionSymbol > remoteVersionSymbol) { - return false; - } - } catch (Exception e) { - return true; - } - } - return false; - } -} diff --git a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/view/IndexView.java b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/view/IndexView.java index d99872e01fa1d7c7722a6600b51b9e035352d82d..767f357f41d08ad28efe9d0ea42030a0a1923080 100644 --- a/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/view/IndexView.java +++ b/xJavaFxTool/src/main/java/com/xwintop/xJavaFxTool/view/IndexView.java @@ -1,15 +1,14 @@ package com.xwintop.xJavaFxTool.view; -import java.util.ResourceBundle; - import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.layout.VBox; -import javafx.scene.web.WebView; import lombok.Getter; import lombok.Setter; +import java.util.ResourceBundle; + @Getter @Setter public abstract class IndexView implements Initializable { @@ -38,8 +37,8 @@ public abstract class IndexView implements Initializable { @FXML protected Menu helpMenu; - @FXML - protected WebView tongjiWebView; +// @FXML +// protected WebView tongjiWebView; @FXML protected VBox pluginCategories; diff --git a/xJavaFxTool/src/main/resources/com/xwintop/xJavaFxTool/fxmlView/Index.fxml b/xJavaFxTool/src/main/resources/com/xwintop/xJavaFxTool/fxmlView/Index.fxml index 38887617367ffe465b3365862fb0de0221bda386..302748c48c7409ad9cafc3253e698bba422aff88 100644 --- a/xJavaFxTool/src/main/resources/com/xwintop/xJavaFxTool/fxmlView/Index.fxml +++ b/xJavaFxTool/src/main/resources/com/xwintop/xJavaFxTool/fxmlView/Index.fxml @@ -3,7 +3,6 @@ - @@ -69,7 +68,6 @@ - diff --git a/debugTools/x-RedisTool/src/main/java/com/xwintop/xJavaFxTool/utils/VersionChecker.java b/xcore/src/main/java/com/xwintop/xcore/util/VersionChecker.java similarity index 85% rename from debugTools/x-RedisTool/src/main/java/com/xwintop/xJavaFxTool/utils/VersionChecker.java rename to xcore/src/main/java/com/xwintop/xcore/util/VersionChecker.java index 9fdc82efabe46dd68feafb1e54b34118f064726a..f5dde631271aea0848a04115ba1974c050a90693 100644 --- a/debugTools/x-RedisTool/src/main/java/com/xwintop/xJavaFxTool/utils/VersionChecker.java +++ b/xcore/src/main/java/com/xwintop/xcore/util/VersionChecker.java @@ -1,9 +1,9 @@ -package com.xwintop.xJavaFxTool.utils; +package com.xwintop.xcore.util; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; -import com.xwintop.xcore.util.javafx.AlertUtil; +import com.xwintop.xcore.javafx.dialog.FxAlerts; import com.xwintop.xcore.util.javafx.JavaFxSystemUtil; import javafx.application.Platform; import lombok.extern.slf4j.Slf4j; @@ -14,23 +14,22 @@ import java.util.function.BiConsumer; /** * @ClassName: VersionChecker - * @Description: 版本检查工具类 + * @Description: 新版本检查 * @author: xufeng - * @date: 2021/1/31 22:25 + * @date: 2022/3/28 14:59 */ @Slf4j public class VersionChecker { - public static void checkerVersion(String checkUrl, String downloadUrl, String version) { VersionChecker.hasNewVersion(checkUrl, version, (latestVersion, features) -> { String title = "发现新版本"; final String content = new StringBuilder() - .append("最新版本: ").append(latestVersion).append("\r\n") - .append("当前版本: v").append(version).append("\r\n") - .append("新特性: \r\n").append(features) - .toString(); - if (AlertUtil.showConfirmAlert(content)) { + .append("最新版本: ").append(latestVersion).append("\r\n") + .append("当前版本: v").append(version).append("\r\n") + .append("新特性: \r\n").append(features) + .toString(); + if (FxAlerts.confirmOkCancel(title + latestVersion, content)) { try { JavaFxSystemUtil.openBrowseURLThrowsException(downloadUrl); } catch (IOException e) { diff --git a/xcore/src/main/java/com/xwintop/xcore/util/javafx/FileChooserUtil.java b/xcore/src/main/java/com/xwintop/xcore/util/javafx/FileChooserUtil.java index bdd6d64a68c9c3f380994a82e7a17cd403ba68f1..2fb6ed36733f3082051fbcf47b5f0505e75ad3d7 100644 --- a/xcore/src/main/java/com/xwintop/xcore/util/javafx/FileChooserUtil.java +++ b/xcore/src/main/java/com/xwintop/xcore/util/javafx/FileChooserUtil.java @@ -23,11 +23,6 @@ public class FileChooserUtil { public static final File HOME_DIRECTORY = FileSystemView.getFileSystemView().getHomeDirectory(); - //选择多个文件 - public static List chooseFiles() { - return chooseFiles(null); - } - public static List chooseFiles(ExtensionFilter... extensionFilter) { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("请选择文件"); @@ -39,10 +34,6 @@ public class FileChooserUtil { return fileChooser.showOpenMultipleDialog(null); } - public static File chooseFile() { - return chooseFile(null); - } - public static File chooseFile(ExtensionFilter... extensionFilter) { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("请选择文件"); @@ -55,16 +46,6 @@ public class FileChooserUtil { return fileChooser.showOpenDialog(null); } - /////////////////////////////////////////////////////////////// - - public static File chooseSaveFile(ExtensionFilter... extensionFilter) { - return chooseSaveFile(null, extensionFilter); - } - - public static File chooseSaveFile(String fileName) { - return chooseSaveFile(fileName, null); - } - public static File chooseSaveFile(String fileName, ExtensionFilter... extensionFilter) { FileChooser fileChooser = new FileChooser(); fileChooser.setInitialDirectory(HOME_DIRECTORY);