diff --git a/LaunchServer/build.gradle b/LaunchServer/build.gradle index b3120f35..d03c7490 100644 --- a/LaunchServer/build.gradle +++ b/LaunchServer/build.gradle @@ -75,7 +75,7 @@ task cleanjar(type: Jar, dependsOn: jar) { dependencies { pack project(':LauncherAPI') bundle group: 'me.tongfei', name: 'progressbar', version: '0.9.2' - bundle group: 'com.github.Marcono1234', name: 'gson-record-type-adapter-factory', version: 'v0.1.0' + bundle group: 'com.github.Marcono1234', name: 'gson-record-type-adapter-factory', version: 'v0.2.0' bundle group: 'org.fusesource.jansi', name: 'jansi', version: rootProject['verJansi'] bundle group: 'org.jline', name: 'jline', version: rootProject['verJline'] bundle group: 'org.jline', name: 'jline-reader', version: rootProject['verJline'] @@ -84,8 +84,6 @@ pack project(':LauncherAPI') bundle group: 'org.ow2.asm', name: 'asm-commons', version: rootProject['verAsm'] bundle group: 'io.netty', name: 'netty-all', version: rootProject['verNetty'] bundle group: 'org.slf4j', name: 'slf4j-api', version: rootProject['verSlf4j'] - bundle group: 'org.hibernate', name: 'hibernate-core', version: rootProject['verHibernate'] - bundle group: 'org.hibernate', name: 'hibernate-hikaricp', version: rootProject['verHibernate'] bundle group: 'mysql', name: 'mysql-connector-java', version: rootProject['verMySQLConn'] bundle group: 'org.postgresql', name: 'postgresql', version: rootProject['verPostgreSQLConn'] bundle group: 'com.guardsquare', name: 'proguard-base', version: rootProject['verProguard'] @@ -96,8 +94,8 @@ pack project(':LauncherAPI') bundle group: 'io.jsonwebtoken', name: 'jjwt-gson', version: rootProject['verJwt'] testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: rootProject['verJunit'] - hikari 'io.micrometer:micrometer-core:1.7.2' - hikari('com.zaxxer:HikariCP:5.0.0') { + hikari 'io.micrometer:micrometer-core:1.8.4' + hikari('com.zaxxer:HikariCP:5.0.1') { exclude group: 'javassist' exclude group: 'io.micrometer' exclude group: 'org.slf4j' diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/HttpAuthCoreProvider.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/HttpAuthCoreProvider.java index c4539c03..c2ca5844 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/HttpAuthCoreProvider.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/HttpAuthCoreProvider.java @@ -363,6 +363,19 @@ public Map getProperties() { } return properties; } + + @Override + public String toString() { + return "HttpUser{" + + "username='" + username + '\'' + + ", uuid=" + uuid + + ", serverId='" + serverId + '\'' + + ", accessToken='" + accessToken + '\'' + + ", permissions=" + permissions + + ", assets=" + getAssets() + + ", properties=" + properties + + '}'; + } } public static class HttpUserSession implements UserSession { @@ -393,5 +406,14 @@ public User getUser() { public long getExpireIn() { return expireIn; } + + @Override + public String toString() { + return "HttpUserSession{" + + "id='" + id + '\'' + + ", user=" + user + + ", expireIn=" + expireIn + + '}'; + } } } diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/protect/AdvancedProtectHandler.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/protect/AdvancedProtectHandler.java index e65e25cd..3e7fd4e4 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/protect/AdvancedProtectHandler.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/protect/AdvancedProtectHandler.java @@ -51,7 +51,7 @@ public boolean allowGetSecureLevelInfo(Client client) { @Override public void onHardwareReport(HardwareReportResponse response, Client client) { if (!enableHardwareFeature) { - response.sendResult(new HardwareReportRequestEvent(createHardwareToken(client.username, response.hardware))); + response.sendResult(new HardwareReportRequestEvent(null)); return; } if (!client.isAuth || client.trustLevel == null || client.trustLevel.publicKey == null) { @@ -73,11 +73,14 @@ public void onHardwareReport(HardwareReportResponse response, Client client) { throw new SecurityException("Your hardware banned"); } client.trustLevel.hardwareInfo = hardware.getHardwareInfo(); + response.sendResult(new HardwareReportRequestEvent(createHardwareToken(client.username, hardware))); + return; } else { logger.error("AuthCoreProvider not supported hardware"); + response.sendError("AuthCoreProvider not supported hardware"); + return; } } - response.sendResult(new HardwareReportRequestEvent(createHardwareToken(client.username, response.hardware))); } @Override @@ -93,7 +96,7 @@ public VerifySecureLevelKeyRequestEvent onSuccessVerify(Client client) { } client.trustLevel.hardwareInfo = hardware.getHardwareInfo(); authSupportHardware.connectUserAndHardware(client.sessionObject, hardware); - return new VerifySecureLevelKeyRequestEvent(false, false, createPublicKeyToken(client.username, client.trustLevel.publicKey), createHardwareToken(client.username, client.trustLevel.hardwareInfo)); + return new VerifySecureLevelKeyRequestEvent(false, false, createPublicKeyToken(client.username, client.trustLevel.publicKey), createHardwareToken(client.username, hardware)); } else { logger.warn("AuthCoreProvider not supported hardware. HardwareInfo not checked!"); } @@ -115,12 +118,12 @@ public void init(LaunchServer server) { public void close() { } - public String createHardwareToken(String username, HardwareReportRequest.HardwareInfo info) { + public String createHardwareToken(String username, UserHardware hardware) { return Jwts.builder() .setIssuer("LaunchServer") .setSubject(username) .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 8)) - .claim("hardware", info) + .claim("hardware", hardware.getId()) .signWith(server.keyAgreementManager.ecdsaPrivateKey) .compact(); } @@ -152,10 +155,14 @@ public HardwareInfoTokenVerifier(LaunchServer server) { public boolean accept(Client client, AuthProviderPair pair, String extendedToken) { try { var parse = parser.parseClaimsJws(extendedToken); - HardwareReportRequest.HardwareInfo hardwareInfo = parse.getBody().get("hardware", HardwareReportRequest.HardwareInfo.class); - if (hardwareInfo == null) return false; + String hardwareInfoId = parse.getBody().get("hardware", String.class); + if (hardwareInfoId == null) return false; + if(client.auth == null) return false; + var hardwareSupport = client.auth.core.isSupport(AuthSupportHardware.class); + if(hardwareSupport == null) return false; + UserHardware hardware = hardwareSupport.getHardwareInfoById(hardwareInfoId); if (client.trustLevel == null) client.trustLevel = new Client.TrustLevel(); - client.trustLevel.hardwareInfo = hardwareInfo; + client.trustLevel.hardwareInfo = hardware.getHardwareInfo(); return true; } catch (Throwable e) { logger.error("Hardware JWT error", e); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java b/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java index a28b65d3..d01bf131 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java @@ -152,7 +152,7 @@ public Path process(Path inputFile) throws IOException { parser.parse(proguard_cfg); ProGuard proGuard = new ProGuard(proguard_cfg); proGuard.execute(); - } catch (ParseException e) { + } catch (Exception e) { logger.error(e); } } else diff --git a/Launcher/src/main/java/pro/gravit/launcher/client/ClientLauncherEntryPoint.java b/Launcher/src/main/java/pro/gravit/launcher/client/ClientLauncherEntryPoint.java index 44d2c495..af76d9f9 100644 --- a/Launcher/src/main/java/pro/gravit/launcher/client/ClientLauncherEntryPoint.java +++ b/Launcher/src/main/java/pro/gravit/launcher/client/ClientLauncherEntryPoint.java @@ -349,19 +349,19 @@ private static void launch(ClientProfile profile, ClientLauncherProcess.ClientPa } FMLPatcher.apply(); LauncherEngine.modulesManager.invokeEvent(new ClientProcessPreInvokeMainClassEvent(params, profile, args)); - { - List compatClasses = profile.getCompatClasses(); - for (String e : compatClasses) { - Class clazz = classLoader.loadClass(e); - MethodHandle runMethod = MethodHandles.publicLookup().findStatic(clazz, "run", MethodType.methodType(void.class)); - runMethod.invoke(); - } - } - MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)).asFixedArity(); - Launcher.LAUNCHED.set(true); - JVMHelper.fullGC(); // Invoke main method try { + { + List compatClasses = profile.getCompatClasses(); + for (String e : compatClasses) { + Class clazz = classLoader.loadClass(e); + MethodHandle runMethod = MethodHandles.publicLookup().findStatic(clazz, "run", MethodType.methodType(void.class)); + runMethod.invoke(); + } + } + MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)).asFixedArity(); + Launcher.LAUNCHED.set(true); + JVMHelper.fullGC(); mainMethod.invokeWithArguments((Object) args.toArray(new String[0])); LogHelper.debug("Main exit successful"); } catch (Throwable e) { diff --git a/LauncherAPI/src/main/java/pro/gravit/launcher/profiles/ClientProfile.java b/LauncherAPI/src/main/java/pro/gravit/launcher/profiles/ClientProfile.java index 162b22c8..1190994a 100644 --- a/LauncherAPI/src/main/java/pro/gravit/launcher/profiles/ClientProfile.java +++ b/LauncherAPI/src/main/java/pro/gravit/launcher/profiles/ClientProfile.java @@ -516,7 +516,7 @@ public enum SecurityManagerConfig { } public enum ClassLoaderConfig { - AGENT, LAUNCHER, SYSTEM_ARGS + AGENT, LAUNCHER, MODULE, SYSTEM_ARGS } public enum SignedClientConfig { diff --git a/ServerWrapper/build.gradle b/ServerWrapper/build.gradle index 4094ccba..ff62dd0a 100644 --- a/ServerWrapper/build.gradle +++ b/ServerWrapper/build.gradle @@ -14,16 +14,37 @@ } } +sourceSets { + java11 { + java { + srcDirs = ['src/main/java11'] + } + dependencies { + java11Implementation project(':LauncherAPI') + java11Implementation files(sourceSets.main.output.classesDirs) { builtBy compileJava } + } + } +} + sourceCompatibility = '1.8' targetCompatibility = '1.8' +compileJava11Java { + sourceCompatibility = 11 + targetCompatibility = 11 +} + jar { + into('META-INF/versions/11') { + from sourceSets.java11.output + } archiveClassifier.set('clean') manifest.attributes("Main-Class": mainClassName, "Premain-Class": mainAgentName, "Can-Redefine-Classes": "true", "Can-Retransform-Classes": "true", - "Can-Set-Native-Method-Prefix": "true") + "Can-Set-Native-Method-Prefix": "true", + "Multi-Release": "true") } task sourcesJar(type: Jar) { diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java index a07766f2..396bd8c6 100644 --- a/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java @@ -18,6 +18,10 @@ import pro.gravit.launcher.request.auth.RestoreRequest; import pro.gravit.launcher.request.update.ProfilesRequest; import pro.gravit.launcher.request.websockets.StdWebSocketService; +import pro.gravit.launcher.server.launch.ClasspathLaunch; +import pro.gravit.launcher.server.launch.Launch; +import pro.gravit.launcher.server.launch.ModuleLaunch; +import pro.gravit.launcher.server.launch.SimpleLaunch; import pro.gravit.launcher.server.setup.ServerWrapperSetup; import pro.gravit.utils.PublicURLClassLoader; import pro.gravit.utils.helper.IOHelper; @@ -139,22 +143,6 @@ public void run(String... args) throws Throwable { LogHelper.error("Auth not configured. Please use 'java -jar ServerWrapper.jar setup'"); System.exit(-1); } - Class mainClass; - if (config.classpath != null && !config.classpath.isEmpty()) { - if(config.classLoaderConfig == ClientProfile.ClassLoaderConfig.LAUNCHER) { - URL[] urls = config.classpath.stream().map(Paths::get).map(IOHelper::toURL).toArray(URL[]::new); - ucp = new PublicURLClassLoader(urls); - Thread.currentThread().setContextClassLoader(ucp); - loader = ucp; - } else if(config.classLoaderConfig == ClientProfile.ClassLoaderConfig.AGENT) { - if (!ServerAgent.isAgentStarted()) { - LogHelper.error("JavaAgent not found"); - System.exit(-1); - } - for (String c : config.classpath) - ServerAgent.addJVMClassPath(c); - } - } if (config.autoloadLibraries) { if (!ServerAgent.isAgentStarted()) { throw new UnsupportedOperationException("JavaAgent not found, autoloadLibraries not available"); @@ -165,24 +153,34 @@ public void run(String... args) throws Throwable { LogHelper.info("Load libraries"); ServerAgent.loadLibraries(librariesDir); } - if (loader != null) mainClass = Class.forName(classname, true, loader); - else mainClass = Class.forName(classname); - MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)); LogHelper.info("ServerWrapper: LaunchServer address: %s. Title: %s", config.address, Launcher.profile != null ? Launcher.profile.getTitle() : "unknown"); LogHelper.info("Minecraft Version (for profile): %s", wrapper.profile == null ? "unknown" : wrapper.profile.getVersion().name); - LogHelper.info("Start Minecraft Server"); - LogHelper.debug("Invoke main method %s", mainClass.getName()); - if (config.args == null) { - String[] real_args; - if (args.length > 0) { - real_args = new String[args.length - 1]; - System.arraycopy(args, 1, real_args, 0, args.length - 1); - } else real_args = args; - - mainMethod.invoke(real_args); - } else { - mainMethod.invoke(config.args.toArray(new String[0])); + String[] real_args; + if (args.length > 0) { + real_args = new String[args.length - 1]; + System.arraycopy(args, 1, real_args, 0, args.length - 1); + } else real_args = args; + Launch launch; + switch (config.classLoaderConfig) { + case LAUNCHER: + launch = new ClasspathLaunch(); + break; + case MODULE: + launch = new ModuleLaunch(); + break; + default: + launch = new SimpleLaunch(); + break; } + LogHelper.info("Start Minecraft Server"); + LogHelper.debug("Invoke main method %s with %s", config.mainclass, launch.getClass().getName()); + try { + launch.run(config, real_args); + } catch (Throwable e) { + LogHelper.error(e); + System.exit(-1); + } + System.exit(0); } public void updateLauncherConfig() { @@ -231,8 +229,15 @@ public static final class Config { public long oauthExpireTime; public Map extendedTokens; public LauncherConfig.LauncherEnvironment env; + public ModuleConf moduleConf = new ModuleConf(); } - public static final class WebSocketConf { + public static final class ModuleConf { + public List modules = new ArrayList<>(); + public List modulePath = new ArrayList<>(); + public String mainModule = ""; + public Map exports = new HashMap<>(); + public Map opens = new HashMap<>(); + public Map reads = new HashMap<>(); } } diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ClasspathLaunch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ClasspathLaunch.java new file mode 100644 index 00000000..05173094 --- /dev/null +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ClasspathLaunch.java @@ -0,0 +1,23 @@ +package pro.gravit.launcher.server.launch; + +import pro.gravit.launcher.server.ServerWrapper; +import pro.gravit.utils.PublicURLClassLoader; +import pro.gravit.utils.helper.IOHelper; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.net.URL; +import java.nio.file.Paths; + +public class ClasspathLaunch implements Launch { + @Override + @SuppressWarnings("ConfusingArgumentToVarargsMethod") + public void run(ServerWrapper.Config config, String[] args) throws Throwable { + URL[] urls = config.classpath.stream().map(Paths::get).map(IOHelper::toURL).toArray(URL[]::new); + ClassLoader ucl = new PublicURLClassLoader(urls); + Class mainClass = Class.forName(config.mainclass, true, ucl); + MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)); + mainMethod.invoke(args); + } +} diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/Launch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/Launch.java new file mode 100644 index 00000000..becc49f8 --- /dev/null +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/Launch.java @@ -0,0 +1,7 @@ +package pro.gravit.launcher.server.launch; + +import pro.gravit.launcher.server.ServerWrapper; + +public interface Launch { + void run(ServerWrapper.Config config, String[] args) throws Throwable; +} diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ModuleLaunch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ModuleLaunch.java new file mode 100644 index 00000000..2cb55ad7 --- /dev/null +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/ModuleLaunch.java @@ -0,0 +1,10 @@ +package pro.gravit.launcher.server.launch; + +import pro.gravit.launcher.server.ServerWrapper; + +public class ModuleLaunch implements Launch { + @Override + public void run(ServerWrapper.Config config, String[] args) throws Throwable { + throw new UnsupportedOperationException("Module system not supported"); + } +} diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/SimpleLaunch.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/SimpleLaunch.java new file mode 100644 index 00000000..192f95dc --- /dev/null +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/launch/SimpleLaunch.java @@ -0,0 +1,17 @@ +package pro.gravit.launcher.server.launch; + +import pro.gravit.launcher.server.ServerWrapper; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class SimpleLaunch implements Launch { + @Override + @SuppressWarnings("ConfusingArgumentToVarargsMethod") + public void run(ServerWrapper.Config config, String[] args) throws Throwable { + Class mainClass = Class.forName(config.mainclass); + MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)); + mainMethod.invoke(args); + } +} diff --git a/ServerWrapper/src/main/java11/pro/gravit/launcher/server/launch/ModuleLaunch.java b/ServerWrapper/src/main/java11/pro/gravit/launcher/server/launch/ModuleLaunch.java new file mode 100644 index 00000000..2539d3dd --- /dev/null +++ b/ServerWrapper/src/main/java11/pro/gravit/launcher/server/launch/ModuleLaunch.java @@ -0,0 +1,70 @@ +package pro.gravit.launcher.server.launch; + +import pro.gravit.launcher.server.ServerWrapper; +import pro.gravit.utils.PublicURLClassLoader; +import pro.gravit.utils.helper.IOHelper; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.module.Configuration; +import java.lang.module.ModuleFinder; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.stream.Collectors; + +public class ModuleLaunch implements Launch { + @Override + @SuppressWarnings("ConfusingArgumentToVarargsMethod") + public void run(ServerWrapper.Config config, String[] args) throws Throwable { + URL[] urls = config.classpath.stream().map(Paths::get).map(IOHelper::toURL).toArray(URL[]::new); + ClassLoader ucl = new PublicURLClassLoader(urls); + // Create Module Layer + ModuleFinder finder = ModuleFinder.of(config.moduleConf.modulePath.stream().map(Paths::get).toArray(Path[]::new)); + ModuleLayer bootLayer = ModuleLayer.boot(); + Configuration configuration = bootLayer.configuration() + .resolveAndBind(ModuleFinder.of(), finder, config.moduleConf.modules); + ModuleLayer.Controller controller = ModuleLayer.defineModulesWithOneLoader(configuration, List.of(bootLayer), ucl); + ModuleLayer layer = controller.layer(); + // Configure exports / opens + for(var e : config.moduleConf.exports.entrySet()) { + String[] split = e.getKey().split("\\\\"); + Module source = layer.findModule(split[0]).orElseThrow(); + String pkg = split[1]; + Module target = layer.findModule(e.getValue()).orElseThrow(); + controller.addExports(source, pkg, target); + } + for(var e : config.moduleConf.opens.entrySet()) { + String[] split = e.getKey().split("\\\\"); + Module source = layer.findModule(split[0]).orElseThrow(); + String pkg = split[1]; + Module target = layer.findModule(e.getValue()).orElseThrow(); + controller.addOpens(source, pkg, target); + } + for(var e : config.moduleConf.reads.entrySet()) { + Module source = layer.findModule(e.getKey()).orElseThrow(); + Module target = layer.findModule(e.getValue()).orElseThrow(); + controller.addReads(source, target); + } + Module mainModule = layer.findModule(config.moduleConf.mainModule).orElseThrow(); + Module unnamed = ModuleLaunch.class.getClassLoader().getUnnamedModule(); + if(unnamed != null) { + controller.addOpens(mainModule, getPackageFromClass(config.mainclass), unnamed); + } + // Start main class + ClassLoader loader = mainModule.getClassLoader(); + Class mainClass = Class.forName(config.mainclass, true, loader); + MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class)); + mainMethod.invoke(args); + } + + private static String getPackageFromClass(String clazz) { + int index = clazz.lastIndexOf("."); + if(index >= 0) { + return clazz.substring(0, index); + } + return clazz; + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f..41d9927a 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fbce071a..d7e66b5c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/modules b/modules index a1318b09..af6e144e 160000 --- a/modules +++ b/modules @@ -1 +1 @@ -Subproject commit a1318b09c1f5657ad60eaee362746cd493d38c8a +Subproject commit af6e144e4234851bfc5fd27b56584f510bc58bf6 diff --git a/props.gradle b/props.gradle index 6d5b39ab..df4cfa2f 100644 --- a/props.gradle +++ b/props.gradle @@ -1,20 +1,20 @@ project.ext { verAsm = '9.2' - verNetty = '4.1.70.Final' - verOshiCore = '6.0.0' + verNetty = '4.1.75.Final' + verOshiCore = '6.1.5' verJunit = '5.8.2' verGuavaC = '30.1.1-jre' - verJansi = '2.3.4' + verJansi = '2.4.0' verJline = '3.21.0' verJwt = '0.11.2' verBcprov = '1.70' - verGson = '2.8.9' + verGson = '2.9.0' verBcpkix = '1.70' - verSlf4j = '1.7.32' - verLog4j = '2.17.1' - verMySQLConn = '8.0.27' - verPostgreSQLConn = '42.3.1' - verProguard = '7.2.0-beta2' + verSlf4j = '1.7.36' + verLog4j = '2.17.2' + verMySQLConn = '8.0.28' + verPostgreSQLConn = '42.3.3' + verProguard = '7.2.1' verLaunch4j = '3.14' verHibernate = '5.5.6.Final' }