[FEATURE] clearLauncherPackages, LaunchServerControlHolder

This commit is contained in:
Gravita 2024-02-27 16:33:43 +07:00
parent 3e8c1adebe
commit 8cd43b0324
6 changed files with 54 additions and 1 deletions

View File

@ -1,5 +1,6 @@
package pro.gravit.launchserver;
import pro.gravit.launchserver.holder.LaunchServerControlHolder;
import pro.gravit.utils.helper.IOHelper;
import pro.gravit.utils.launch.ClassLoaderControl;
import pro.gravit.utils.launch.LaunchOptions;
@ -54,7 +55,6 @@ public class Main {
unpackLog4j();
ModuleLaunch launch = new ModuleLaunch();
LaunchOptions options = new LaunchOptions();
options.disablePackageDelegateSupport = true;
options.moduleConf = new LaunchOptions.ModuleConf();
List<Path> libraries;
try(Stream<Path> files = Files.walk(Path.of("libraries"), FileVisitOption.FOLLOW_LINKS)) {
@ -73,7 +73,12 @@ public class Main {
options.moduleConf.modulePath.addAll(modulepath);
options.moduleConf.modules.add("ALL-MODULE-PATH");
ClassLoaderControl control = launch.init(classpath, "natives", options);
control.clearLauncherPackages();
control.addLauncherPackage("pro.gravit.utils.launch");
control.addLauncherPackage("pro.gravit.launchserver.holder");
ModuleLayer.Controller controller = (ModuleLayer.Controller) control.getJava9ModuleController();
LaunchServerControlHolder.setControl(control);
LaunchServerControlHolder.setController(controller);
launch.launch("pro.gravit.launchserver.LaunchServerStarter", null, Arrays.asList(args));
}
}

View File

@ -0,0 +1,24 @@
package pro.gravit.launchserver.holder;
import pro.gravit.utils.launch.ClassLoaderControl;
public class LaunchServerControlHolder {
private static ClassLoaderControl control;
private static ModuleLayer.Controller controller;
public static ClassLoaderControl getControl() {
return control;
}
public static void setControl(ClassLoaderControl control) {
LaunchServerControlHolder.control = control;
}
public static ModuleLayer.Controller getController() {
return controller;
}
public static void setController(ModuleLayer.Controller controller) {
LaunchServerControlHolder.controller = controller;
}
}

View File

@ -56,6 +56,11 @@ public class BasicLaunch implements Launch {
throw new UnsupportedOperationException();
}
@Override
public void clearLauncherPackages() {
throw new UnsupportedOperationException();
}
@Override
public void addTransformer(ClassTransformer transformer) {
if (instrumentation == null) {

View File

@ -7,6 +7,7 @@ import java.security.ProtectionDomain;
public interface ClassLoaderControl {
void addLauncherPackage(String prefix);
void clearLauncherPackages();
void addTransformer(ClassTransformer transformer);
void addURL(URL url);
void addJar(Path path);

View File

@ -126,6 +126,10 @@ public class LegacyLaunch implements Launch {
packages.add(pkg);
}
public void clearAllowedPackages() {
packages.clear();
}
private LegacyClassLoaderControl makeControl() {
return new LegacyClassLoaderControl();
}
@ -137,6 +141,11 @@ public class LegacyLaunch implements Launch {
addAllowedPackage(prefix);
}
@Override
public void clearLauncherPackages() {
clearAllowedPackages();
}
@Override
public void addTransformer(ClassTransformer transformer) {
transformers.add(transformer);

View File

@ -264,6 +264,10 @@ public class ModuleLaunch implements Launch {
packages.add(pkg);
}
public void clearAllowedPackages() {
packages.clear();
}
private ModuleClassLoaderControl makeControl() {
return new ModuleClassLoaderControl();
}
@ -275,6 +279,11 @@ public class ModuleLaunch implements Launch {
addAllowedPackage(prefix);
}
@Override
public void clearLauncherPackages() {
clearAllowedPackages();
}
@Override
public void addTransformer(ClassTransformer transformer) {
transformers.add(transformer);