I have a large project for which I have an API. The API is standalone and is shaded into my main project. I then load any addons with this code:
try {
URLClassLoader loader = new URLClassLoader(new URL[] { file.toURI().toURL() }, Helix.class.getClassLoader());
try (loader) {
YmlConfig yml = YmlConfig.parse(loader.getResourceAsStream("addon.yml"));
if (!yml.contains("addon")) {
throw new AddonException("no 'addon' section for addon '" + file.getPath() + "'");
}
Class<?> main = loader.loadClass(yml.get("addon").getString("main"));
return new Addon((HelixAddon) Reflections.getInstance(main));
}
} catch (Throwable e) {
throw new AddonException(e);
}
Though while loading this addon I get the following error
package com.sniskus.helix.addon;
import com.sniskus.helix.api.HelixAddon;
import com.sniskus.helix.api.attribute.Domain;
import com.sniskus.helix.api.attribute.element.Function;
public class Test implements HelixAddon {
@Override
public void onLoad() {
HelixApi.getApi().getDomain(this).register(new Function<Void, Void>() {
// code (i've hit character limit lol)
});
}
}
error: ```
[15:46:53 WARN]: java.lang.NoClassDefFoundError: com/sniskus/helix/addon/Test$1
[15:46:53 WARN]: at com.sniskus.helix.addon.Test.onLoad(Test.java:34)
[15:46:53 WARN]: at Helix-3.2.1.jar//com.sniskus.helix.api.impl.ApiImpl.lambda$0(ApiImpl.java:31)
[15:46:53 WARN]: at java.base/java.util.HashMap$KeySet.forEach(HashMap.java:1016)
[15:46:53 WARN]: at Helix-3.2.1.jar//com.sniskus.helix.api.impl.ApiImpl.loadAddons(ApiImpl.java:29)
[15:46:53 WARN]: at Helix-3.2.1.jar//com.sniskus.helix.Helix.onPluginEnable(Helix.java:115)
[15:46:53 WARN]: at Yggdrasil-2.1.1.jar//com.sniskus.yggdrasil.plugin.YPlugin.onEnable(YPlugin.java:40)
[15:46:53 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:288)
[15:46:53 WARN]: at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:202)
[15:46:53 WARN]: at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:109)
[15:46:53 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:520)
[15:46:53 WARN]: at org.bukkit.craftbukkit.CraftServer.enablePlugin(CraftServer.java:640)
[15:46:53 WARN]: at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:589)
[15:46:53 WARN]: at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:753)
[15:46:53 WARN]: at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:515)
[15:46:53 WARN]: at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:329)
[15:46:53 WARN]: at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1214)
[15:46:53 WARN]: at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:329)
[15:46:53 WARN]: at java.base/java.lang.Thread.run(Thread.java:1583)
[15:46:53 WARN]: Caused by: java.lang.ClassNotFoundException: com.sniskus.helix.addon.Test$1
[15:46:53 WARN]: at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
[15:46:53 WARN]: at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
[15:46:53 WARN]: at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
[15:46:53 WARN]: ... 18 more