提问者:小点点

尝试使用mongoDB时出现NoClassDefFoundError-Spigot插件


我想写一个插件,可以通过检查nosql数据库来验证用户,但是当我尝试在我的服务器上运行它时,我遇到了错误。我使用gradle导入mongo驱动程序,但得到NoClassDefFoundError。这是错误代码:

[04:17:15] [Server thread/INFO]: [mcloginx] mongo uri: mongodb://localhost:27017
[04:17:15] [Server thread/WARN]: java.lang.NoClassDefFoundError: com/mongodb/MongoClient
[04:17:15] [Server thread/WARN]:        at com.t2o0n321.mcloginx.utils.db.testConnect(db.java:21)
[04:17:15] [Server thread/WARN]:        at com.t2o0n321.mcloginx.mcloginx.onEnable(mcloginx.java:35)
[04:17:15] [Server thread/WARN]:        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263)
[04:17:15] [Server thread/WARN]:        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:342)
[04:17:15] [Server thread/WARN]:        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480)
[04:17:15] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:492)
[04:17:15] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:406)
[04:17:15] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.reload(CraftServer.java:879)
[04:17:15] [Server thread/WARN]:        at org.bukkit.Bukkit.reload(Bukkit.java:651)
[04:17:15] [Server thread/WARN]:        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27)
[04:17:15] [Server thread/WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149)
[04:17:15] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:761)
[04:17:15] [Server thread/WARN]:        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchServerCommand(CraftServer.java:746)
[04:17:15] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.DedicatedServer.handleCommandQueue(DedicatedServer.java:426)
[04:17:15] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:395)
[04:17:15] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1127)
[04:17:15] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:966)
[04:17:15] [Server thread/WARN]:        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:273)
[04:17:15] [Server thread/WARN]:        at java.base/java.lang.Thread.run(Thread.java:829)
[04:17:15] [Server thread/WARN]: Caused by: java.lang.ClassNotFoundException: com.mongodb.MongoClient
[04:17:15] [Server thread/WARN]:        at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:140)
[04:17:15] [Server thread/WARN]:        at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:99)
[04:17:15] [Server thread/WARN]:        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
[04:17:15] [Server thread/WARN]:        ... 19 more
[04:17:15] [Server thread/INFO]: [mcloginx] Can't connect to mongo

这是我的build. gradle文件:

plugins {
    id 'java'
    id 'application'
}

group 'com.t2o0n321.mcloginx'
version '1.0.0'

repositories {
    mavenCentral()
    maven {url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'}
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
    compileOnly 'org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT'
    // implementation 'org.mongodb:mongodb-driver-core'
    implementation 'org.mongodb:mongodb-driver-core:4.4.1'
    implementation 'org.mongodb:mongo-java-driver:3.12.10'
}

test {
    useJUnitPlatform()
}

我用谷歌搜索了一下,但还没有得到解决方案。如何解决这个问题?


共1个答案

匿名用户

发生错误是因为没有导出具有所有依赖项的jar。我通过使用影子Jar打包所有依赖项来收集来解决它。

将以下代码添加到build. gradle

plugins {
    id 'com.github.johnrengelman.shadow' version '7.0.0'
}
project.setProperty("mainClassName", "com.your.mainclass")
shadowJar {
    manifest {
        attributes 'Main-Class': 'com.your.mainclass'
    }
}

并键入./gradlew影子Jarint终端。

您将在build/libs目录中找到jar文件。