mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-22 16:41:46 +03:00
Merge branch 'release/5.5.4'
This commit is contained in:
commit
db6ab061de
11 changed files with 86 additions and 32 deletions
|
@ -9,21 +9,23 @@
|
||||||
import pro.gravit.utils.command.SubCommand;
|
import pro.gravit.utils.command.SubCommand;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
import pro.gravit.utils.helper.JVMHelper;
|
||||||
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
import pro.gravit.utils.helper.UnpackHelper;
|
import pro.gravit.utils.helper.UnpackHelper;
|
||||||
import proguard.Configuration;
|
|
||||||
import proguard.ConfigurationParser;
|
|
||||||
import proguard.ProGuard;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.file.FileVisitOption;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
@ -32,6 +34,7 @@ public class ProGuardComponent extends Component implements AutoCloseable, Recon
|
||||||
private static final Logger logger = LogManager.getLogger();
|
private static final Logger logger = LogManager.getLogger();
|
||||||
public String modeAfter = "MainBuild";
|
public String modeAfter = "MainBuild";
|
||||||
public String dir = "proguard";
|
public String dir = "proguard";
|
||||||
|
public List<String> jvmArgs = new ArrayList<>();
|
||||||
public boolean enabled = true;
|
public boolean enabled = true;
|
||||||
public boolean mappings = true;
|
public boolean mappings = true;
|
||||||
public transient ProguardConf proguardConf;
|
public transient ProguardConf proguardConf;
|
||||||
|
@ -39,6 +42,10 @@ public class ProGuardComponent extends Component implements AutoCloseable, Recon
|
||||||
private transient ProGuardBuildTask buildTask;
|
private transient ProGuardBuildTask buildTask;
|
||||||
private transient ProGuardMultiReleaseFixer fixerTask;
|
private transient ProGuardMultiReleaseFixer fixerTask;
|
||||||
|
|
||||||
|
public ProGuardComponent() {
|
||||||
|
this.jvmArgs.add("-Xmx512M");
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean checkFXJMods(Path path) {
|
public static boolean checkFXJMods(Path path) {
|
||||||
if (!IOHelper.exists(path.resolve("javafx.base.jmod")))
|
if (!IOHelper.exists(path.resolve("javafx.base.jmod")))
|
||||||
return false;
|
return false;
|
||||||
|
@ -191,7 +198,6 @@ public String getName() {
|
||||||
public Path process(Path inputFile) throws IOException {
|
public Path process(Path inputFile) throws IOException {
|
||||||
Path outputJar = server.launcherBinary.nextLowerPath(this);
|
Path outputJar = server.launcherBinary.nextLowerPath(this);
|
||||||
if (component.enabled) {
|
if (component.enabled) {
|
||||||
Configuration proguard_cfg = new Configuration();
|
|
||||||
if (!checkJMods(IOHelper.JVM_DIR.resolve("jmods"))) {
|
if (!checkJMods(IOHelper.JVM_DIR.resolve("jmods"))) {
|
||||||
throw new RuntimeException("Java path: %s is not JDK! Please install JDK".formatted(IOHelper.JVM_DIR));
|
throw new RuntimeException("Java path: %s is not JDK! Please install JDK".formatted(IOHelper.JVM_DIR));
|
||||||
}
|
}
|
||||||
|
@ -204,12 +210,35 @@ public Path process(Path inputFile) throws IOException {
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException("JavaFX jmods not found. May be install OpenJFX?");
|
throw new RuntimeException("JavaFX jmods not found. May be install OpenJFX?");
|
||||||
}
|
}
|
||||||
ConfigurationParser parser = new ConfigurationParser(proguardConf.buildConfig(inputFile, outputJar, jfxPath == null ? new Path[0] : new Path[]{jfxPath}),
|
|
||||||
proguardConf.proguard.toFile(), System.getProperties());
|
|
||||||
try {
|
try {
|
||||||
parser.parse(proguard_cfg);
|
List<String> args = new ArrayList<>();
|
||||||
ProGuard proGuard = new ProGuard(proguard_cfg);
|
args.add(IOHelper.resolveJavaBin(IOHelper.JVM_DIR).toAbsolutePath().toString());
|
||||||
proGuard.execute();
|
args.addAll(component.jvmArgs);
|
||||||
|
args.add("-cp");
|
||||||
|
try(Stream<Path> files = Files.walk(Path.of("libraries"), FileVisitOption.FOLLOW_LINKS)) {
|
||||||
|
args.add(files
|
||||||
|
.filter(e -> e.getFileName().toString().endsWith(".jar"))
|
||||||
|
.map(path -> path.toAbsolutePath().toString())
|
||||||
|
.collect(Collectors.joining(File.pathSeparator))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
args.add("proguard.ProGuard");
|
||||||
|
proguardConf.buildConfig(args, inputFile, outputJar, jfxPath == null ? new Path[0] : new Path[]{jfxPath});
|
||||||
|
|
||||||
|
Process process = new ProcessBuilder()
|
||||||
|
.command(args)
|
||||||
|
.inheritIO()
|
||||||
|
.directory(proguardConf.proguard.toFile())
|
||||||
|
.start();
|
||||||
|
|
||||||
|
try {
|
||||||
|
process.waitFor();
|
||||||
|
} catch (InterruptedException ignored) {
|
||||||
|
|
||||||
|
}
|
||||||
|
if (process.exitValue() != 0) {
|
||||||
|
throw new RuntimeException("ProGuard process return %d".formatted(process.exitValue()));
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error(e);
|
logger.error(e);
|
||||||
}
|
}
|
||||||
|
@ -256,8 +285,7 @@ private static String generateString(SecureRandom rand, String lowString, String
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] buildConfig(Path inputJar, Path outputJar, Path[] jfxPath) {
|
public void buildConfig(List<String> confStrs, Path inputJar, Path outputJar, Path[] jfxPath) {
|
||||||
List<String> confStrs = new ArrayList<>();
|
|
||||||
prepare(false);
|
prepare(false);
|
||||||
if (component.mappings)
|
if (component.mappings)
|
||||||
confStrs.add("-printmapping '" + mappings.toFile().getName() + "'");
|
confStrs.add("-printmapping '" + mappings.toFile().getName() + "'");
|
||||||
|
@ -279,7 +307,6 @@ public String[] buildConfig(Path inputJar, Path outputJar, Path[] jfxPath) {
|
||||||
.forEach(confStrs::add);
|
.forEach(confStrs::add);
|
||||||
confStrs.add("-classobfuscationdictionary '" + words.toFile().getName() + "'");
|
confStrs.add("-classobfuscationdictionary '" + words.toFile().getName() + "'");
|
||||||
confStrs.add("@".concat(config.toFile().getName()));
|
confStrs.add("@".concat(config.toFile().getName()));
|
||||||
return confStrs.toArray(new String[0]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void genConfig(boolean force) throws IOException {
|
private void genConfig(boolean force) throws IOException {
|
||||||
|
|
|
@ -171,6 +171,14 @@ public void start(boolean pipeOutput) throws IOException, InterruptedException {
|
||||||
LogHelper.debug("Commandline: %s", Arrays.toString(processArgs.toArray()));
|
LogHelper.debug("Commandline: %s", Arrays.toString(processArgs.toArray()));
|
||||||
ProcessBuilder processBuilder = new ProcessBuilder(processArgs);
|
ProcessBuilder processBuilder = new ProcessBuilder(processArgs);
|
||||||
EnvHelper.addEnv(processBuilder);
|
EnvHelper.addEnv(processBuilder);
|
||||||
|
if(JVMHelper.OS_TYPE == JVMHelper.OS.LINUX){
|
||||||
|
var env = processBuilder.environment();
|
||||||
|
// https://github.com/Admicos/minecraft-wayland/issues/55
|
||||||
|
env.put("__GL_THREADED_OPTIMIZATIONS", "0");
|
||||||
|
if(params.lwjglGlfwWayland) {
|
||||||
|
env.remove("DISPLAY"); // No X11
|
||||||
|
}
|
||||||
|
}
|
||||||
processBuilder.environment().put("JAVA_HOME", javaVersion.jvmDir.toAbsolutePath().toString());
|
processBuilder.environment().put("JAVA_HOME", javaVersion.jvmDir.toAbsolutePath().toString());
|
||||||
processBuilder.environment().putAll(systemEnv);
|
processBuilder.environment().putAll(systemEnv);
|
||||||
processBuilder.directory(workDir.toFile());
|
processBuilder.directory(workDir.toFile());
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class AuthService {
|
public class AuthService {
|
||||||
|
public static String projectName;
|
||||||
public static String username;
|
public static String username;
|
||||||
public static ClientPermissions permissions = new ClientPermissions();
|
public static ClientPermissions permissions = new ClientPermissions();
|
||||||
public static UUID uuid;
|
public static UUID uuid;
|
||||||
|
|
|
@ -60,6 +60,8 @@ public final class ClientProfile implements Comparable<ClientProfile> {
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
private List<String> compatClasses;
|
private List<String> compatClasses;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
|
private List<String> loadNatives;
|
||||||
|
@LauncherNetworkAPI
|
||||||
private Map<String, String> properties;
|
private Map<String, String> properties;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
private List<ServerProfile> servers;
|
private List<ServerProfile> servers;
|
||||||
|
@ -253,6 +255,10 @@ public ProfileDefaultSettings getSettings() {
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getLoadNatives() {
|
||||||
|
return loadNatives;
|
||||||
|
}
|
||||||
|
|
||||||
public void updateOptionalGraph() {
|
public void updateOptionalGraph() {
|
||||||
for (OptionalFile file : updateOptional) {
|
for (OptionalFile file : updateOptional) {
|
||||||
if (file.dependenciesFile != null) {
|
if (file.dependenciesFile != null) {
|
||||||
|
@ -460,7 +466,7 @@ public enum ClassLoaderConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CompatibilityFlags {
|
public enum CompatibilityFlags {
|
||||||
LEGACY_NATIVES_DIR, CLASS_CONTROL_API, ENABLE_HACKS
|
LEGACY_NATIVES_DIR, CLASS_CONTROL_API, ENABLE_HACKS, WAYLAND_USE_CUSTOM_GLFW
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Version implements Comparable<Version> {
|
public static class Version implements Comparable<Version> {
|
||||||
|
|
|
@ -142,6 +142,12 @@ private static void realMain(String[] args) throws Throwable {
|
||||||
LaunchOptions options = new LaunchOptions();
|
LaunchOptions options = new LaunchOptions();
|
||||||
options.enableHacks = profile.hasFlag(ClientProfile.CompatibilityFlags.ENABLE_HACKS);
|
options.enableHacks = profile.hasFlag(ClientProfile.CompatibilityFlags.ENABLE_HACKS);
|
||||||
options.moduleConf = profile.getModuleConf();
|
options.moduleConf = profile.getModuleConf();
|
||||||
|
ClientService.nativePath = params.nativesDir;
|
||||||
|
if(profile.getLoadNatives() != null) {
|
||||||
|
for(String e : profile.getLoadNatives()) {
|
||||||
|
System.load(Paths.get(params.nativesDir).resolve(ClientService.findLibrary(e)).toAbsolutePath().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
if (classLoaderConfig == ClientProfile.ClassLoaderConfig.LAUNCHER) {
|
if (classLoaderConfig == ClientProfile.ClassLoaderConfig.LAUNCHER) {
|
||||||
if(JVMHelper.JVM_VERSION <= 11) {
|
if(JVMHelper.JVM_VERSION <= 11) {
|
||||||
launch = new LegacyLaunch();
|
launch = new LegacyLaunch();
|
||||||
|
@ -151,7 +157,6 @@ private static void realMain(String[] args) throws Throwable {
|
||||||
classLoaderControl = launch.init(classpath, params.nativesDir, options);
|
classLoaderControl = launch.init(classpath, params.nativesDir, options);
|
||||||
System.setProperty("java.class.path", classpath.stream().map(Path::toString).collect(Collectors.joining(File.pathSeparator)));
|
System.setProperty("java.class.path", classpath.stream().map(Path::toString).collect(Collectors.joining(File.pathSeparator)));
|
||||||
modulesManager.invokeEvent(new ClientProcessClassLoaderEvent(launch, classLoaderControl, profile));
|
modulesManager.invokeEvent(new ClientProcessClassLoaderEvent(launch, classLoaderControl, profile));
|
||||||
ClientService.nativePath = params.nativesDir;
|
|
||||||
ClientService.baseURLs = classLoaderControl.getURLs();
|
ClientService.baseURLs = classLoaderControl.getURLs();
|
||||||
} else if (classLoaderConfig == ClientProfile.ClassLoaderConfig.AGENT) {
|
} else if (classLoaderConfig == ClientProfile.ClassLoaderConfig.AGENT) {
|
||||||
launch = new BasicLaunch(LauncherAgent.inst);
|
launch = new BasicLaunch(LauncherAgent.inst);
|
||||||
|
@ -161,22 +166,21 @@ private static void realMain(String[] args) throws Throwable {
|
||||||
LauncherAgent.addJVMClassPath(Paths.get(url.toURI()));
|
LauncherAgent.addJVMClassPath(Paths.get(url.toURI()));
|
||||||
}
|
}
|
||||||
ClientService.instrumentation = LauncherAgent.inst;
|
ClientService.instrumentation = LauncherAgent.inst;
|
||||||
ClientService.nativePath = params.nativesDir;
|
|
||||||
modulesManager.invokeEvent(new ClientProcessClassLoaderEvent(launch, null, profile));
|
modulesManager.invokeEvent(new ClientProcessClassLoaderEvent(launch, null, profile));
|
||||||
ClientService.baseURLs = classpathURLs.toArray(new URL[0]);
|
ClientService.baseURLs = classpathURLs.toArray(new URL[0]);
|
||||||
} else if (classLoaderConfig == ClientProfile.ClassLoaderConfig.SYSTEM_ARGS) {
|
} else if (classLoaderConfig == ClientProfile.ClassLoaderConfig.SYSTEM_ARGS) {
|
||||||
launch = new BasicLaunch();
|
launch = new BasicLaunch();
|
||||||
classLoaderControl = launch.init(classpath, params.nativesDir, options);
|
classLoaderControl = launch.init(classpath, params.nativesDir, options);
|
||||||
ClientService.baseURLs = classpathURLs.toArray(new URL[0]);
|
ClientService.baseURLs = classpathURLs.toArray(new URL[0]);
|
||||||
ClientService.nativePath = params.nativesDir;
|
|
||||||
}
|
}
|
||||||
if(profile.hasFlag(ClientProfile.CompatibilityFlags.CLASS_CONTROL_API)) {
|
if(profile.hasFlag(ClientProfile.CompatibilityFlags.CLASS_CONTROL_API)) {
|
||||||
ClientService.classLoaderControl = classLoaderControl;
|
ClientService.classLoaderControl = classLoaderControl;
|
||||||
}
|
}
|
||||||
if(params.lwjglGlfwWayland) {
|
if(params.lwjglGlfwWayland && profile.hasFlag(ClientProfile.CompatibilityFlags.WAYLAND_USE_CUSTOM_GLFW)) {
|
||||||
String glfwPath = ClientService.findLibrary("glfw_wayland");
|
String glfwName = ClientService.findLibrary("glfw_wayland");
|
||||||
System.setProperty("org.lwjgl.glfw.libname", glfwPath);
|
System.setProperty("org.lwjgl.glfw.libname", glfwName);
|
||||||
}
|
}
|
||||||
|
AuthService.projectName = Launcher.getConfig().projectName;
|
||||||
AuthService.username = params.playerProfile.username;
|
AuthService.username = params.playerProfile.username;
|
||||||
AuthService.uuid = params.playerProfile.uuid;
|
AuthService.uuid = params.playerProfile.uuid;
|
||||||
KeyService.serverRsaPublicKey = Launcher.getConfig().rsaPublicKey;
|
KeyService.serverRsaPublicKey = Launcher.getConfig().rsaPublicKey;
|
||||||
|
|
|
@ -6,7 +6,7 @@ public final class Version implements Comparable<Version> {
|
||||||
|
|
||||||
public static final int MAJOR = 5;
|
public static final int MAJOR = 5;
|
||||||
public static final int MINOR = 5;
|
public static final int MINOR = 5;
|
||||||
public static final int PATCH = 3;
|
public static final int PATCH = 4;
|
||||||
public static final int BUILD = 1;
|
public static final int BUILD = 1;
|
||||||
public static final Version.Type RELEASE = Type.STABLE;
|
public static final Version.Type RELEASE = Type.STABLE;
|
||||||
public final int major;
|
public final int major;
|
||||||
|
|
|
@ -46,7 +46,7 @@ private JVMHelper() {
|
||||||
|
|
||||||
public static ARCH getArch(String arch) {
|
public static ARCH getArch(String arch) {
|
||||||
if (arch.equals("amd64") || arch.equals("x86-64") || arch.equals("x86_64")) return ARCH.X86_64;
|
if (arch.equals("amd64") || arch.equals("x86-64") || arch.equals("x86_64")) return ARCH.X86_64;
|
||||||
if (arch.equals("i386") || arch.equals("i686") || arch.equals("x86")) return ARCH.X86;
|
if (arch.equals("i386") || arch.equals("i586") || arch.equals("i686") || arch.equals("x86")) return ARCH.X86;
|
||||||
if (arch.startsWith("armv8") || arch.startsWith("aarch64")) return ARCH.ARM64;
|
if (arch.startsWith("armv8") || arch.startsWith("aarch64")) return ARCH.ARM64;
|
||||||
if (arch.startsWith("arm") || arch.startsWith("aarch32")) return ARCH.ARM32;
|
if (arch.startsWith("arm") || arch.startsWith("aarch32")) return ARCH.ARM32;
|
||||||
throw new InternalError(String.format("Unsupported arch '%s'", arch));
|
throw new InternalError(String.format("Unsupported arch '%s'", arch));
|
||||||
|
|
|
@ -265,7 +265,6 @@ public static JavaVersion getByPath(Path jvmDir) {
|
||||||
arch = JVMHelper.getArch(archProperty);
|
arch = JVMHelper.getArch(archProperty);
|
||||||
}
|
}
|
||||||
} catch (Throwable ignored) {
|
} catch (Throwable ignored) {
|
||||||
arch = null;
|
|
||||||
}
|
}
|
||||||
String modulesProperty = getProperty(properties, "MODULES");
|
String modulesProperty = getProperty(properties, "MODULES");
|
||||||
if(modulesProperty != null) {
|
if(modulesProperty != null) {
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
import pro.gravit.utils.launch.*;
|
import pro.gravit.utils.launch.*;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.lang.invoke.MethodHandle;
|
import java.lang.invoke.MethodHandle;
|
||||||
import java.lang.invoke.MethodHandles;
|
import java.lang.invoke.MethodHandles;
|
||||||
import java.lang.invoke.MethodType;
|
import java.lang.invoke.MethodType;
|
||||||
|
@ -183,12 +184,21 @@ public void run(String... args) throws Throwable {
|
||||||
System.arraycopy(args, 1, real_args, 0, args.length - 1);
|
System.arraycopy(args, 1, real_args, 0, args.length - 1);
|
||||||
} else real_args = args;
|
} else real_args = args;
|
||||||
Launch launch;
|
Launch launch;
|
||||||
|
ClientService.nativePath = config.nativesDir;
|
||||||
|
ConfigService.serverName = config.serverName;
|
||||||
|
if(config.loadNatives != null) {
|
||||||
|
for(String e : config.loadNatives) {
|
||||||
|
System.load(Paths.get(config.nativesDir).resolve(ClientService.findLibrary(e)).toAbsolutePath().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
switch (config.classLoaderConfig) {
|
switch (config.classLoaderConfig) {
|
||||||
case LAUNCHER:
|
case LAUNCHER:
|
||||||
launch = new LegacyLaunch();
|
launch = new LegacyLaunch();
|
||||||
|
System.setProperty("java.class.path", String.join(File.pathSeparator, config.classpath));
|
||||||
break;
|
break;
|
||||||
case MODULE:
|
case MODULE:
|
||||||
launch = new ModuleLaunch();
|
launch = new ModuleLaunch();
|
||||||
|
System.setProperty("java.class.path", String.join(File.pathSeparator, config.classpath));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if(ServerAgent.isAgentStarted()) {
|
if(ServerAgent.isAgentStarted()) {
|
||||||
|
@ -207,13 +217,10 @@ public void run(String... args) throws Throwable {
|
||||||
}
|
}
|
||||||
ClientService.classLoaderControl = classLoaderControl;
|
ClientService.classLoaderControl = classLoaderControl;
|
||||||
ClientService.baseURLs = classLoaderControl.getURLs();
|
ClientService.baseURLs = classLoaderControl.getURLs();
|
||||||
ClientService.nativePath = config.nativesDir;
|
|
||||||
ConfigService.serverName = config.serverName;
|
|
||||||
if(config.configServiceSettings != null) {
|
if(config.configServiceSettings != null) {
|
||||||
config.configServiceSettings.apply();
|
config.configServiceSettings.apply();
|
||||||
}
|
}
|
||||||
LogHelper.info("Start Minecraft Server");
|
LogHelper.info("Start Minecraft Server");
|
||||||
LogHelper.debug("Invoke main method %s with %s", classname, launch.getClass().getName());
|
|
||||||
try {
|
try {
|
||||||
if(config.compatClasses != null) {
|
if(config.compatClasses != null) {
|
||||||
for (String e : config.compatClasses) {
|
for (String e : config.compatClasses) {
|
||||||
|
@ -222,6 +229,7 @@ public void run(String... args) throws Throwable {
|
||||||
runMethod.invoke(classLoaderControl);
|
runMethod.invoke(classLoaderControl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LogHelper.debug("Invoke main method %s with %s", classname, launch.getClass().getName());
|
||||||
launch.launch(config.mainclass, config.mainmodule, Arrays.asList(real_args));
|
launch.launch(config.mainclass, config.mainmodule, Arrays.asList(real_args));
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LogHelper.error(e);
|
LogHelper.error(e);
|
||||||
|
@ -274,6 +282,7 @@ public static final class Config {
|
||||||
public String nativesDir = "natives";
|
public String nativesDir = "natives";
|
||||||
public List<String> args;
|
public List<String> args;
|
||||||
public List<String> compatClasses;
|
public List<String> compatClasses;
|
||||||
|
public List<String> loadNatives;
|
||||||
public String authId;
|
public String authId;
|
||||||
public AuthRequestEvent.OAuthRequestEvent oauth;
|
public AuthRequestEvent.OAuthRequestEvent oauth;
|
||||||
public long oauthExpireTime;
|
public long oauthExpireTime;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
id 'org.openjfx.javafxplugin' version '0.0.10' apply false
|
id 'org.openjfx.javafxplugin' version '0.0.10' apply false
|
||||||
}
|
}
|
||||||
group = 'pro.gravit.launcher'
|
group = 'pro.gravit.launcher'
|
||||||
version = '5.5.3'
|
version = '5.5.4'
|
||||||
|
|
||||||
apply from: 'props.gradle'
|
apply from: 'props.gradle'
|
||||||
|
|
||||||
|
|
12
props.gradle
12
props.gradle
|
@ -1,19 +1,19 @@
|
||||||
project.ext {
|
project.ext {
|
||||||
verAsm = '9.6'
|
verAsm = '9.6'
|
||||||
verNetty = '4.1.99.Final'
|
verNetty = '4.1.99.Final'
|
||||||
verOshiCore = '6.4.6'
|
verOshiCore = '6.4.11'
|
||||||
verJunit = '5.9.3'
|
verJunit = '5.9.3'
|
||||||
verGuavaC = '30.1.1-jre'
|
verGuavaC = '30.1.1-jre'
|
||||||
verJansi = '2.4.0'
|
verJansi = '2.4.1'
|
||||||
verJline = '3.23.0'
|
verJline = '3.25.0'
|
||||||
verJwt = '0.11.5'
|
verJwt = '0.11.5'
|
||||||
verBcprov = '1.70'
|
verBcprov = '1.70'
|
||||||
verGson = '2.10.1'
|
verGson = '2.10.1'
|
||||||
verBcpkix = '1.70'
|
verBcpkix = '1.70'
|
||||||
verSlf4j = '1.7.36'
|
verSlf4j = '1.7.36'
|
||||||
verLog4j = '2.20.0'
|
verLog4j = '2.20.0'
|
||||||
verMySQLConn = '8.1.0'
|
verMySQLConn = '8.3.0'
|
||||||
verPostgreSQLConn = '42.6.0'
|
verPostgreSQLConn = '42.7.1'
|
||||||
verProguard = '7.4.0'
|
verProguard = '7.4.1'
|
||||||
verLaunch4j = '3.50'
|
verLaunch4j = '3.50'
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue