When running my Spigot plugin (built with Kotlin and Maven) I'm receiving an error about a missing class.
The file 'com.github.shynixn.mccoroutine.bukkit.impl.MCCoroutineImpl' is missing in my .jar. And it is, as seen when running the command ls -R
in the jar structure. But the folder 'impl' does contain a file with a strange name, which might have something to do with this.
./com/github/shynixn/mccoroutine/bukkit/impl: 'CoroutineSessionImpl$init$inlined$Runnable$1.class'
How can I resolve this issue?
I contacted the library owner with this issue.
Implementation details:
minimizeJar
When building my Spigot plugin (built with Kotlin and Maven) - Maven does not log any errors. This is the output:
[INFO] Including com.github.shynixn.mccoroutine:mccoroutine-bukkit-api:jar:2.13.0 in the shaded jar. [INFO] Including com.github.shynixn.mccoroutine:mccoroutine-bukkit-core:jar:2.13.0 in the shaded jar.
When I run the plugin, I'm receiving the following error:
java.lang.RuntimeException: Failed to load MCCoroutine implementation. Shade mccoroutine-bukkit-core into your plugin.
at com.github.shynixn.mccoroutine.bukkit.MCCoroutineKt$mcCoroutine$2.invoke(MCCoroutine.kt:20) ~[?:?]
at com.github.shynixn.mccoroutine.bukkit.MCCoroutineKt$mcCoroutine$2.invoke(MCCoroutine.kt:15) ~[?:?]
at me.sd_master92.kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) ~[?:?]
at com.github.shynixn.mccoroutine.bukkit.MCCoroutineKt.getMcCoroutine(MCCoroutine.kt:15) ~[?:?]
at com.github.shynixn.mccoroutine.bukkit.MCCoroutineKt.getMinecraftDispatcher(MCCoroutine.kt:40) ~[?:?]
at com.github.shynixn.mccoroutine.bukkit.MCCoroutineKt.launch$default(MCCoroutine.kt:85) ~[?:?]
at me.sd_master92.customvoting.CV.enable(CV.kt:53) ~[?:?]
at me.sd_master92.core.plugin.CustomPlugin.onEnable(CustomPlugin.kt:42) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:266) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:342) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R2.CraftServer.enablePlugin(CraftServer.java:548) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at org.bukkit.craftbukkit.v1_20_R2.CraftServer.enablePlugins(CraftServer.java:462) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at org.bukkit.craftbukkit.v1_20_R2.CraftServer.reload(CraftServer.java:970) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at org.bukkit.Bukkit.reload(Bukkit.java:834) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R2.CraftServer.dispatchCommand(CraftServer.java:879) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at org.bukkit.craftbukkit.v1_20_R2.CraftServer.dispatchServerCommand(CraftServer.java:864) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at net.minecraft.server.dedicated.DedicatedServer.bf(DedicatedServer.java:412) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at net.minecraft.server.dedicated.DedicatedServer.b(DedicatedServer.java:388) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:1179) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:996) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:298) ~[spigot-1.20.2-R0.1-SNAPSHOT.jar:3943-Spigot-7de1049-8e162d0]
at java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.ClassNotFoundException: com.github.shynixn.mccoroutine.bukkit.impl.MCCoroutineImpl
at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:160) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:112) ~[spigot-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Class.java:421) ~[?:?]
at java.lang.Class.forName(Class.java:412) ~[?:?]
at com.github.shynixn.mccoroutine.bukkit.MCCoroutineKt$mcCoroutine$2.invoke(MCCoroutine.kt:17) ~[?:?]
... 24 more
A solution to this problem (not the cleanest) was to include all files from this package into the shaded .jar.
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<filters>
<filter>
<artifact>com.github.shynixn.mccoroutine:mccoroutine-bukkit-core</artifact>
<includes>
<include>*/**</include>
</includes>
</filter>
</filters>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</configuration>```