Minecraft FORGE引入外部JAR出现noclassdef错误如何正确配置?
Minecraft Forge 外部JAR依赖NoClassDefFoundError解决方法
你当前的配置仅将外部JAR加入了编译类路径,没有处理Forge运行时的类加载需求,同时缺少对外部依赖的反混淆处理,因此运行时会抛出NoClassDefFoundError,正确配置方式如下:
前置准备
在项目根目录创建lib文件夹,将discord-rpc-release-v3.3.0.jar、java-discord-rpc-2.0.2.jar两个文件放入该目录。
步骤1:配置本地依赖仓库
修改项目build.gradle文件的repositories块,追加本地lib目录作为仓库:
repositories { // 保留原有已声明的其他仓库(如mavenCentral、Forge官方仓库等),追加下方配置 flatDir { dirs 'lib' } }
步骤2:根据Forge版本选择依赖配置方式
方案A:Forge 1.18.2及以上版本(推荐使用官方jarJar功能)
直接将依赖打进最终的Mod JAR包,运行时自动加载:
dependencies { // 保留原有已声明的其他依赖,替换你原有的implementation配置为下方内容 implementation fg.deobf("lib:discord-rpc-release-v3.3.0") implementation fg.deobf("lib:java-discord-rpc-2.0.2") // 配置jarJar将依赖嵌入Mod包 jarJar(group: 'lib', name: 'discord-rpc-release-v3.3.0', version: '3.3.0') jarJar(group: 'lib', name: 'java-discord-rpc-2.0.2', version: '2.0.2') }
方案B:Forge 1.18.1及更低版本(使用Shadow插件打包)
- 首先引入Shadow插件,在
build.gradle顶部的plugins块追加配置:
plugins { // 保留原有已声明的其他插件,追加下方配置 id 'com.github.johnrengelman.shadow' version '7.1.2' }
- 修改
dependencies块配置:
dependencies { // 保留原有已声明的其他依赖,替换你原有的implementation配置为下方内容 shadow fg.deobf("lib:discord-rpc-release-v3.3.0") shadow fg.deobf("lib:java-discord-rpc-2.0.2") implementation fg.deobf("lib:discord-rpc-release-v3.3.0") implementation fg.deobf("lib:java-discord-rpc-2.0.2") }
- 追加Shadow打包配置,避免依赖冲突:
shadowJar { // 将discord rpc的包路径重定位到你的模组包名下,避免和其他模组的同依赖冲突 relocate 'com.github.psnrigner.discordrpc', '你的模组实际包名.shadow.discordrpc' } // 配置build任务自动构建带依赖的Shadow包 build.dependsOn shadowJar
注意事项
- 所有外部JAR依赖都需要用
fg.deobf包裹进行反混淆处理,否则Forge运行时的SRG命名环境无法正常识别类 - 禁止直接使用文件路径声明依赖,通过flatDir仓库+坐标的方式引入可以正确触发Gradle和Forge的依赖处理流程
- 使用Shadow插件时必须做包重定位,否则多个模组包含相同依赖时会出现类冲突问题
内容的提问来源于stack exchange,提问作者Jethalal
相关产品推荐
相关产品推荐

