2023年12月14日

开发小记 解决Fabric模组运行报错duplicate fabric loader classes found

作者 TheWhiteDog9487

情况介绍

我需要为Minecraft 1.19.1制作一个工作在Fabric Loader上的模组。
并且这个模组有一些配置项可以让用户自行调整。
我使用了ModMenu和Cloth Config API

这是Cloth Config的文档

根据文档我把我的build.gradle改成了这样:

然后呢,我还什么代码都没写,内置的Minecraft Client任务就已经运行不起来了:

这是我的报错:

Exception in thread "main" java.lang.ExceptionInInitializerError
	at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
	at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
Caused by: java.lang.IllegalStateException: duplicate fabric loader classes found on classpath: jar:file:/C:/Users/TheWhiteDog9487/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.15.1/b5e44adc848d1c3709194b01f97629de145c8a65/fabric-loader-0.15.1.jar!/net/fabricmc/loader/api/FabricLoader.class, jar:file:/D:/SourceCode/JetBrains/IntelliJ%20IDEA/untitled/.gradle/loom-cache/remapped_mods/net_fabricmc_yarn_1_19_1_1_19_1_build_6_v2/net/fabricmc/fabric-loader/0.14.8/fabric-loader-0.14.8.jar!/net/fabricmc/loader/api/FabricLoader.class
	at net.fabricmc.loader.impl.util.LoaderUtil.verifyClasspath(LoaderUtil.java:65)
	at net.fabricmc.loader.impl.launch.knot.Knot.<clinit>(Knot.java:347)
	... 2 more

怎么解决呢?

把modApi指令换成modImplementation,然后重载Gradle项目配置文件

一定要记得重载Gradle项目配置文件!

然后就可以了


这个问题的具体原理不详,但这个方法确实好使。
另外,我在Minecraft 1.20.4上没有观测到这个问题

TheWhiteDog9487
2023 12 14
C语言课程上课期间攥写完成