java - Spigot 插件上的 NoClassDefFoundError 试图包含 Apache Commons Text
问题描述
我正在编写一个 Spigot 插件,我需要在其中使用 Levenshtein 距离,所以我使用的是 Apache Commons Text 1.8
当我导出插件并尝试运行它时,我得到一个 NoClassDefFoundError ,我在其中实例化了 LevenshteinDistance 对象。
我正在使用 Gradle 来设置依赖项。
构建.gradle:
repositories {
// Use jcenter for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
mavenCentral()
maven {
url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/"
}
maven {
url "https://repo.dmulloy2.net/nexus/repository/public/"
}
}
dependencies {
// This dependency is exported to consumers, that is to say found on their compile classpath.
api 'org.apache.commons:commons-math3:3.6.1'
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation 'com.google.guava:guava:27.0.1-jre'
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
compileOnly 'org.bukkit:bukkit:1.15.2-R0.1-SNAPSHOT';
compileOnly 'com.comphenix.protocol:ProtocolLib:4.5.0';
compile 'org.apache.commons:commons-text:1.8';
}
错误
[15:06:10] [Server thread/ERROR]: Error occurred while enabling CubeChat v0.1 (Is it up to date?)
java.lang.NoClassDefFoundError: org/apache/commons/text/similarity/LevenshteinDistance
at com.cubepalace.cubechat.listeners.FilterListener.<init>(FilterListener.java:30) ~[?:?]
at com.cubepalace.cubechat.CubeChat.register(CubeChat.java:71) ~[?:?]
at com.cubepalace.cubechat.CubeChat.onEnable(CubeChat.java:44) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:351) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:432) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:366) [PlugMan.jar:?]
at com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:114) [PlugMan.jar:?]
at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) [PlugMan.jar:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at org.bukkit.craftbukkit.v1_15_R1.CraftServer.dispatchCommand(CraftServer.java:713) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at org.bukkit.craftbukkit.v1_15_R1.CraftServer.dispatchServerCommand(CraftServer.java:698) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at net.minecraft.server.v1_15_R1.DedicatedServer.handleCommandQueue(DedicatedServer.java:443) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at net.minecraft.server.v1_15_R1.DedicatedServer.b(DedicatedServer.java:407) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at net.minecraft.server.v1_15_R1.MinecraftServer.a(MinecraftServer.java:984) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:824) [spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]
Caused by: java.lang.ClassNotFoundException: org.apache.commons.text.similarity.LevenshteinDistance
at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[?:1.8.0_212]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:167) ~[spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:96) ~[spigot-1.15.2.jar:git-Spigot-8faa8b4-fba9f48]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_212]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_212]
... 18 more
如何将所需的库打包到 jar 中以便我可以运行它?使用 Eclipse IDE。
解决方案
您已经正确地发现依赖项在构建时存在,但在运行时不存在。
您需要做的是一个称为“着色”的过程。有一个 Gradle 插件可以做到这一点。
这是一个链接:https ://imperceptiblethoughts.com/shadow/getting-started/#default-java-groovy-tasks
推荐阅读
- github - 错误:RPC 失败;curl 55 请求的 URL 返回错误:从 R Studio 推送到 GIT 时出现 401
- c - nmake 相当于 mingw 命令
- react-native - React Native 的默认模态模糊
- java - 排序单元 Java 程序
- react-native - React Native 中的对齐按钮
- angular - Angular 内联编辑设计
- javascript - Firebase Google signInWithRedirect 未在成功验证时重定向到指定页面
- swift - 上传构建时 SDK 版本问题失败
- r - R - 扩散模型中的非线性回归时间间隔估计
- c++ - OpenGL反射未正确映射天空盒