Wanted to make a quick skeleton project to show what my issue is. I’m wanting to use Kotlin to develop a mod using Spigot for Minecraft, but I’m getting an error “java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics”. I’ve read several different things and am not sure what the solution is.
I’ve heard of a shadow jar or something? Not sure what that is. I’m hoping that there is a straightforward solution though!
Walkthrough
New Project → Kotlin JVM
/hello → Error Log:
Summary
[Server thread/WARN]: Unexpected exception while parsing console command "hello"
org.bukkit.command.CommandException: Unhandled exception executing command 'hello' in plugin KotlinSkeleton v1.0.0
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at org.bukkit.craftbukkit.v1_14_R1.CraftServer.dispatchCommand(CraftServer.java:710) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at org.bukkit.craftbukkit.v1_14_R1.CraftServer.dispatchServerCommand(CraftServer.java:695) [spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at net.minecraft.server.v1_14_R1.DedicatedServer.handleCommandQueue(DedicatedServer.java:430) [spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at net.minecraft.server.v1_14_R1.DedicatedServer.b(DedicatedServer.java:394) [spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:970) [spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:815) [spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]
Caused by: java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at com.talvysh.kotlinskeleton.KotlinCmd.onCommand(KotlinCmd.kt) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
... 8 more
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_221]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:135) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:81) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_221]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_221]
at com.talvysh.kotlinskeleton.KotlinCmd.onCommand(KotlinCmd.kt) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-368f4e9]
... 8 more
KotlinSkeleton.kt
package com.talvysh.kotlinskeleton
import org.bukkit.plugin.java.JavaPlugin
public class KotlinSkeleton: JavaPlugin(){
override fun onEnable() {
logger.info("Enabled.")
getCommand("hello")?.setExecutor(KotlinCmd())
}
override fun onDisable() {}
}
KotlinCmd.kt
package com.talvysh.kotlinskeleton
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
public class KotlinCmd: CommandExecutor{
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
if(label.equals("hello", true)) {
sender.sendMessage("Hello, World!")
return true
}
return false
}
}
Additional Info
Modules → Dependencies:
- Spigot.jar
- Spigot API folder
Artifacts → Output Layout
- KotlinJavaRuntime
- ‘KotlinSkeleton’ compile output
Everything else is left default.