Revert "Refactoring launch types"

This reverts commit 75410477bf.
This commit is contained in:
dima_dencep 2023-07-02 13:48:13 +07:00
parent 7e13fd3d38
commit 3c134d5652
No known key found for this signature in database
GPG key ID: ED87FE0D1750A12D
5 changed files with 42 additions and 64 deletions

View file

@ -4,23 +4,20 @@
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(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable {
URL[] urls = config.classpath.stream()
.map(Paths::get)
.map(IOHelper::toURL)
.toArray(URL[]::new);
MethodHandles.lookup()
.findStatic(Class.forName(mainClass, true, new PublicURLClassLoader(urls)), "main", MethodType.methodType(void.class, String[].class))
.invoke(args);
public void run(String mainclass, 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(mainclass, true, ucl);
MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class));
mainMethod.invoke(args);
}
}

View file

@ -3,5 +3,5 @@
import pro.gravit.launcher.server.ServerWrapper;
public interface Launch {
void run(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable;
void run(String mainclass, ServerWrapper.Config config, String[] args) throws Throwable;
}

View file

@ -3,9 +3,8 @@
import pro.gravit.launcher.server.ServerWrapper;
public class ModuleLaunch implements Launch {
@Override
public void run(String mainClass, ServerWrapper.Config config, String[] args) {
public void run(String mainclass, ServerWrapper.Config config, String[] args) {
throw new UnsupportedOperationException("Module system not supported");
}
}

View file

@ -2,16 +2,16 @@
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(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable {
MethodHandles.lookup()
.findStatic(Class.forName(mainClass), "main", MethodType.methodType(void.class, String[].class))
.invoke(args);
public void run(String mainclass, ServerWrapper.Config config, String[] args) throws Throwable {
Class<?> mainClass = Class.forName(mainclass);
MethodHandle mainMethod = MethodHandles.lookup().findStatic(mainClass, "main", MethodType.methodType(void.class, String[].class));
mainMethod.invoke(args);
}
}

View file

@ -4,6 +4,7 @@
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;
@ -14,74 +15,55 @@
import java.util.List;
public class ModuleLaunch implements Launch {
@Override
@SuppressWarnings("ConfusingArgumentToVarargsMethod")
public void run(String mainClass, ServerWrapper.Config config, String[] args) throws Throwable {
URL[] urls = config.classpath.stream()
.map(Paths::get)
.map(IOHelper::toURL)
.toArray(URL[]::new);
public void run(String mainclass, 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)
);
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), new PublicURLClassLoader(urls));
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()) {
for(var e : config.moduleConf.exports.entrySet()) {
String[] split = e.getKey().split("\\\\");
controller.addExports(
layer.findModule(split[0]).orElseThrow(),
split[1],
layer.findModule(e.getValue()).orElseThrow()
);
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()) {
for(var e : config.moduleConf.opens.entrySet()) {
String[] split = e.getKey().split("\\\\");
controller.addOpens(
layer.findModule(split[0]).orElseThrow(),
split[1],
layer.findModule(e.getValue()).orElseThrow()
);
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()) {
controller.addReads(
layer.findModule(e.getKey()).orElseThrow(),
layer.findModule(e.getValue()).orElseThrow()
);
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) {
if(unnamed != null) {
controller.addOpens(mainModule, getPackageFromClass(config.mainclass), unnamed);
}
// Start main class
MethodHandles.lookup()
.findStatic(Class.forName(mainClass, true, mainModule.getClassLoader()), "main", MethodType.methodType(void.class, String[].class))
.invoke(args);
ClassLoader loader = mainModule.getClassLoader();
Class<?> mainClass = Class.forName(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) {
if(index >= 0) {
return clazz.substring(0, index);
}
return clazz;
}
}