Conflict with commons-collections4 and Sponge Forge

I use the JDA API (discord api for Java) in my sponge plugin, it work very well with Sponge but with Forge Sponge, it doesn’t work:

[15:56:49] [Server thread/ERROR] [Sponge]: Could not pass FMLLoadCompleteEvent to Plugin{id=battlebot, name=BattleBot, version=1.0, description=Bot Discord de Battle2Nation, source=/home/serveur28/minecraft/./plugins/BattleBot.jar}
java.lang.NoClassDefFoundError: org/apache/commons/collections4/map/CaseInsensitiveMap
	at net.dv8tion.jda.core.utils.JDALogger.<clinit>(JDALogger.java:57) ~[JDALogger.class:?]
	at net.dv8tion.jda.core.entities.impl.JDAImpl.<clinit>(JDAImpl.java:59) ~[JDAImpl.class:?]
	at net.dv8tion.jda.core.JDABuilder.build(JDABuilder.java:787) ~[JDABuilder.class:?]
	at net.dv8tion.jda.core.JDABuilder.buildAsync(JDABuilder.java:681) ~[JDABuilder.class:?]
	at fr.tristiisch.battle2nation.bot.discord.BattleDiscord.connect(BattleDiscord.java:62) ~[BattleDiscord.class:?]
	at fr.tristiisch.battle2nation.bot.BattleBot.onServerStart(BattleBot.java:34) ~[BattleBot.class:?]
	at org.spongepowered.common.event.listener.GameLoadCompleteEventListener_BattleBot_onServerStart55.handle(Unknown Source) ~[?:?]
	at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95) ~[RegisteredListener.class:1.12.2-2705-7.1.0-BETA-3346]
	at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:383) [SpongeModEventManager.class:1.12.2-2705-7.1.0-BETA-3346]
	at org.spongepowered.mod.event.SpongeModEventManager.extendedPost(SpongeModEventManager.java:443) [SpongeModEventManager.class:1.12.2-2705-7.1.0-BETA-3346]
	at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:404) [SpongeModEventManager.class:1.12.2-2705-7.1.0-BETA-3346]
	at org.spongepowered.common.SpongeImpl.postEvent(SpongeImpl.java:231) [SpongeImpl.class:1.12.2-2705-7.1.0-BETA-3346]
	at org.spongepowered.mod.SpongeMod.onStateEvent(SpongeMod.java:271) [SpongeMod.class:1.12.2-2705-7.1.0-BETA-3346]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_171]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_171]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_171]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_171]
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [minecraft_server.1.12.2.jar:?]
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.EventBus.post(EventBus.java:217) [minecraft_server.1.12.2.jar:?]
	at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:218) [LoadController.class:?]
	at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:196) [LoadController.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_171]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_171]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_171]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_171]
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) [minecraft_server.1.12.2.jar:?]
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) [minecraft_server.1.12.2.jar:?]
	at com.google.common.eventbus.EventBus.post(EventBus.java:217) [minecraft_server.1.12.2.jar:?]
	at net.minecraftforge.fml.common.LoadController.redirect$onPost$zza000(LoadController.java:560) [LoadController.class:?]
	at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:135) [LoadController.class:?]
	at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:752) [Loader.class:?]
	at net.minecraftforge.fml.server.FMLServerHandler.finishServerLoading(FMLServerHandler.java:107) [FMLServerHandler.class:?]
	at net.minecraftforge.fml.common.FMLCommonHandler.onServerStarted(FMLCommonHandler.java:337) [FMLCommonHandler.class:?]
	at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:219) [nz.class:?]
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486) [MinecraftServer.class:?]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.map.CaseInsensitiveMap
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_171]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[?:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_171]
	at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:106) ~[launchwrapper-1.12.jar:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_171]
	... 45 more

The API use commons-collections4 4.1 so I add it to Maven but no succes, same error.

	<dependency>
	  <groupId>org.apache.commons</groupId>
	  <artifactId>commons-collections4</artifactId>
	  <version>4.1</version>
	</dependency>

When you say “it works well with Sponge, but not Forge Sponge”, are you referring to SpongeVanilla?

1 Like

Yes I’m referring to SpongeVanilla

The problem boils down to you including an org.apache package, but forge has an exclusion on loading those classes from mods, see discussion:

Basically you need to shade and relocate the package under a different namespace.

2 Likes