You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Minecraft PaperMC插件时,Gradle引入MongoDB遇类找不到错误

解决PaperMC插件中Gradle引入MongoDB导致的java.lang.NoClassDefFoundError问题

问题描述

我在开发Minecraft PaperMC插件时,按照MongoDB Java Sync的快速开始文档用Gradle配置了依赖,但服务器启动并尝试连接数据库时,反复出现java.lang.NoClassDefFoundError: com/mongodb/client/MongoClients错误。

我的Gradle依赖配置如下:

dependencies {
    implementation(platform("org.mongodb:mongodb-driver-bom:5.6.5"))
    implementation("org.mongodb:mongodb-driver-sync")

    compileOnly("io.papermc.paper:paper-api:1.20.6-R0.1-SNAPSHOT")
}

用IntelliJ Idea免费版查看,Gradle侧边栏显示所有依赖都已在compileClasspath和runtimeClasspath中,但运行时依然报错。查了不少资料发现很多人碰到同样问题,但没找到明确解决方案,这里分享我自己的解决办法,也欢迎大家提出其他方案。

问题根源

PaperMC插件默认构建的jar包只包含开发者自己编写的代码,不会把implementation声明的第三方依赖(比如MongoDB驱动)打包进去。服务器运行时找不到这些依赖类,就会抛出NoClassDefFoundError。

解决方法

步骤1:引入ShadowJar插件

ShadowJar是一款Gradle插件,能够将第三方依赖打包到最终的插件jar文件中。在build.gradle文件顶部添加插件配置:

plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '8.1.1'
    id 'io.papermc.paperweight.userdev' version '1.5.11'
}

注意:确保已经引入了paperweight插件,这是PaperMC官方推荐的插件开发构建工具。

步骤2:(可选)自定义ShadowJar配置

如果需要调整打包规则,比如排除不需要的依赖、自定义jar文件名,可以添加以下配置:

shadowJar {
    // 设置最终jar的基础名称和版本号
    archiveBaseName.set('YourPluginName')
    archiveVersion.set('1.0.0')
    // 示例:排除某个不需要的依赖包
    exclude('some/unwanted/package/**')
}

步骤3:构建包含依赖的插件jar

在Gradle任务中执行shadowJar任务(而非默认的jar任务):

  • 在IntelliJ的Gradle侧边栏里,找到Tasks > shadow > shadowJar,双击执行即可。

步骤4:替换服务器插件文件

构建完成后,在build/libs/目录下找到带有-all后缀的jar包(例如YourPluginName-1.0.0-all.jar),将这个jar包放到服务器的plugins目录中,重启服务器即可。

验证

重启服务器后,插件连接MongoDB时不再抛出NoClassDefFoundError,能够正常完成数据库操作。

内容的提问来源于stack exchange,提问作者Rhombus17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 20:04:53