无法连接MariaDB驱动:Minecraft插件数据库连接故障排查
解决Minecraft插件连接MariaDB时的ClassNotFoundException问题
问题根源
Minecraft(Spigot/Bukkit)的插件类加载器是隔离式的——你通过Gradle添加的implementation依赖仅在编译阶段生效,不会被自动打包到最终生成的插件JAR文件里。运行时服务器的类加载器找不到MariaDB驱动类,就会抛出ClassNotFoundException或者No suitable driver found异常。
解决方案:用Gradle Shadow插件打包驱动到插件JAR
这是最可靠的解决方式,步骤如下:
添加Shadow插件到Gradle配置
在你的build.gradle文件的plugins块中加入Shadow插件:plugins { id 'java' id 'com.github.johnrengelman.shadow' version '7.1.2' // 可替换为最新兼容版本 // 其他插件(如spigot相关插件)保持不变 }修改MariaDB驱动的依赖类型
把原来的implementation依赖改成shadow,这样Shadow插件会把驱动类打包到最终的插件JAR中:dependencies { shadow 'org.mariadb.jdbc:mariadb-java-client:4.2' // 你的其他依赖(如spigot-api)保持不变,比如compileOnly 'org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT' }生成包含驱动的插件JAR
在IntelliJ的Gradle面板中,找到Tasks > shadow > shadowJar任务并执行,或者在终端运行:./gradlew shadowJar生成的JAR文件会在
build/libs目录下,文件名通常是[你的插件名]-[版本]-all.jar,这个就是包含了MariaDB驱动的完整插件包。替换服务器插件目录中的JAR
把生成的带-all后缀的JAR放到服务器的plugins目录,重启服务器即可。
额外优化
JDBC 4.0及以上版本会自动加载类路径中的驱动类,所以你可以移除代码中的Class.forName("org.mariadb.jdbc.Driver");这一行,直接调用DriverManager.getConnection()即可。
内容的提问来源于stack exchange,提问作者ToneXum
相关产品推荐
相关产品推荐

