Skip to content

Commit 65fa5e8

Browse files
committed
moved launch target logic to its own system...
1 parent 1125588 commit 65fa5e8

17 files changed

+37
-976
lines changed

src/main/java/module-info.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@
88
exports org.mangorage.bootstrap.api.launch;
99
exports org.mangorage.bootstrap.api.loader;
1010
exports org.mangorage.bootstrap.api.dependency;
11+
exports org.mangorage.bootstrap.api.util;
1112

1213
opens org.mangorage.bootstrap;
13-
exports org.mangorage.bootstrap.internal.launch;
14-
15-
provides org.mangorage.bootstrap.api.launch.ILaunchTarget with org.mangorage.bootstrap.internal.launch.MangoBotLaunchTarget;
16-
provides org.mangorage.bootstrap.api.dependency.IDependencyLocator with org.mangorage.bootstrap.internal.launch.MangoBotDependencyLocator;
1714

1815
uses org.mangorage.bootstrap.api.transformer.IClassTransformer;
1916
uses org.mangorage.bootstrap.api.module.IModuleConfigurator;

src/main/java/org/mangorage/bootstrap/Bootstrap.java

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.mangorage.bootstrap;
22

33
import com.google.gson.Gson;
4-
import org.mangorage.bootstrap.api.dependency.IDependencyLocator;
54
import org.mangorage.bootstrap.api.launch.ILaunchTarget;
65
import org.mangorage.bootstrap.internal.util.Util;
7-
import org.mangorage.bootstrap.internal.launch.MangoBotLaunchTarget;
86
import java.lang.module.Configuration;
97
import java.lang.module.ModuleFinder;
8+
import java.net.URL;
9+
import java.net.URLClassLoader;
1010
import java.nio.file.Files;
1111
import java.nio.file.Path;
1212
import java.util.HashMap;
@@ -32,17 +32,11 @@ public static void main(String[] args) throws Throwable {
3232

3333
ModuleLayer parent = null;
3434

35-
if (Bootstrap.class.getModule() != null) {
36-
parent = Bootstrap.class.getModule().getLayer();
37-
}
38-
3935
if (parent == null)
4036
parent = ModuleLayer.boot();
4137

4238
// Where additional launch targets can be defined...
43-
Path launchPath = Path.of(
44-
"launch"
45-
);
39+
final Path launchPath = Path.of("boot").toAbsolutePath();
4640

4741
final var moduleCfg = Configuration
4842
.resolveAndBind(
@@ -65,25 +59,28 @@ public static void main(String[] args) throws Throwable {
6559
Thread.currentThread().getContextClassLoader()
6660
);
6761
final var moduleLayer = moduleLayerController.layer();
62+
final var moduleCL = new URLClassLoader(
63+
new URL[]{
64+
Path.of("boot/boot.jar").toUri().toURL()
65+
},
66+
Thread.currentThread().getContextClassLoader()
67+
);
68+
69+
moduleLayer.defineModulesWithOneLoader(moduleCfg, moduleCL);
70+
Thread.currentThread().setContextClassLoader(moduleCL);
6871

6972
final Map<String, ILaunchTarget> launchTargetMap = new HashMap<>();
7073

71-
// ServiceLoader.load(moduleLayer, ILaunchTarget.class)
72-
// .stream()
73-
// .forEach(provider -> {
74-
// try {
75-
// final var target = provider.get();
76-
// launchTargetMap.put(target.getId(), target);
77-
// } catch (Exception e) {
78-
// throw new IllegalStateException(e);
79-
// }
80-
// });
81-
82-
// Only add if we dont have any other launch targets...
83-
if (launchTargetMap.isEmpty()) {
84-
final var defaultLaunchTarget = new MangoBotLaunchTarget();
85-
launchTargetMap.put(defaultLaunchTarget.getId(), defaultLaunchTarget);
86-
}
74+
ServiceLoader.load(moduleLayer, ILaunchTarget.class)
75+
.stream()
76+
.forEach(provider -> {
77+
try {
78+
final var target = provider.get();
79+
launchTargetMap.put(target.getId(), target);
80+
} catch (Exception e) {
81+
throw new IllegalStateException(e);
82+
}
83+
});
8784

8885
if (!launchTargetMap.containsKey(launchTarget)) {
8986
throw new IllegalStateException("Cant find launch target '%s'".formatted(launchTarget));
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package org.mangorage.bootstrap.api.loader;
22

3-
import org.mangorage.bootstrap.internal.launch.MangoLoaderImpl;
43

5-
public sealed interface IMangoLoader permits MangoLoaderImpl {
4+
public interface IMangoLoader {
65
byte[] getClassBytes(String name);
76
boolean hasClass(String name);
87
}

src/main/java/org/mangorage/bootstrap/api/module/IModuleLayer.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package org.mangorage.bootstrap.api.module;
22

3-
import org.mangorage.bootstrap.internal.launch.ModuleLayerImpl;
4-
53
import java.util.List;
64

7-
public sealed interface IModuleLayer permits ModuleLayerImpl {
5+
public interface IModuleLayer {
86
void addOpens(String sourceModule, String pkg, String targetModule);
97
void addExports(String sourceModule, String pkg, String targetModule);
108
void addReads(String sourceModule, String targetModule);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.mangorage.bootstrap.api.util;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
5+
6+
public final class GsonUtil {
7+
private static final Gson GSON = new GsonBuilder().create();
8+
9+
public static <T> T get(Class<T> tClass, String json) {
10+
return GSON.fromJson(json, tClass);
11+
}
12+
}

src/main/java/org/mangorage/bootstrap/internal/DependencyHandler.java

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/main/java/org/mangorage/bootstrap/internal/JarHandler.java

Lines changed: 0 additions & 109 deletions
This file was deleted.

src/main/java/org/mangorage/bootstrap/internal/launch/ClassTransformers.java

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)