Forge Java模组开发:mysql-connector-java依赖打包后失效求助
Forge模组打包后无法连接MySQL的问题求助
我已经花了两周时间尝试为我的Forge Java模组添加mysql-connector-java依赖,目的是实现客户端与SQL服务器的连接。在IDE开发环境中,代码可以正常连接服务器并执行数据库操作,但打包后的客户端完全无法实现该功能。
我尝试过使用com.github.johnrengelman.shadow插件将依赖打包进模组Jar包,但操作后要么没有效果,要么出现错误;多次执行shadowJar命令(搭配不同选项)也没能解决问题。
以下是我的相关配置、错误日志和测试代码:
gradle.build 配置
plugins { id 'java' id 'net.minecraftforge.gradle' version '5.1.+' id 'com.github.johnrengelman.shadow' version '7.1.2' } version = '1.0' group = 'com.example.mymod' archivesBaseName = 'mymod-1.19.2' java.toolchain.languageVersion = JavaLanguageVersion.of(17) minecraft { mappings channel: 'official', version: '1.19.2' runs { client { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' mods { mymod { source sourceSets.main } } } } } repositories { mavenCentral() } dependencies { minecraft 'net.minecraftforge:forge:1.19.2-43.2.0' implementation 'mysql:mysql-connector-java:8.0.33' } shadowJar { relocate 'com.mysql', 'com.example.mymod.libs.mysql' }
错误日志
Exception in thread "Render thread" java.lang.NoClassDefFoundError: com/mysql/jdbc/Driver at com.example.mymod.MyMod.lambda$onClientTick$0(MyMod.java:38) at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247) at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239) at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) at net.minecraftforge.fml.LogicalSidedProvider$SideRunner.run(LogicalSidedProvider.java:266) at net.minecraftforge.fml.LogicalSidedProvider$SideRunner.run(LogicalSidedProvider.java:254) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 12 more
测试代码
try { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "User", "Password"); String sql = "INSERT INTO chat_messages (Test) VALUES (?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, Test); statement.executeUpdate(); statement.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } catch (ClassNotFoundException e) { e.printStackTrace(); }
希望各位能给出解决思路或具体的配置修改方案,感谢帮助。
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

