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

编译Jar后出现NoClassDefFoundError: com/google/auth/Credentials,开发环境正常

解决Fabric模组打包后Google API依赖缺失的问题

问题根源

你遇到的java.lang.NoClassDefFoundError是因为Gradle默认打包Fabric模组时,只会包含你编写的代码,implementation声明的第三方依赖不会被嵌入到最终的Jar文件中。IDE运行时会自动将所有依赖加入类路径,所以能正常运行,但游戏加载模组时找不到这些缺失的类。

解决步骤

1. 添加Shadow插件

Shadow插件可以帮你把第三方依赖嵌入到模组Jar中,同时支持重命名依赖包避免冲突。在build.gradle的plugins块中添加:

plugins {
    id 'fabric-loom' version '1.+'
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}

2. 修改依赖配置

将所有需要嵌入的第三方非模组依赖(比如Google API、dotenv、soundlibs等)从implementation改为shadow。保留modImplementation用于Fabric相关的模组依赖(比如Fabric API、simple-voice-chat)。修改后的依赖块示例:

dependencies {
    // Minecraft/Fabric基础依赖
    minecraft "com.mojang:minecraft:${project.minecraft_version}"
    mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
    modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
    modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
    modRuntimeOnly "maven.modrinth:simple-voice-chat:fabric-1.20.1-2.4.24"

    // 第三方依赖改用shadow配置,会被嵌入到模组Jar
    shadow 'io.github.cdimascio:java-dotenv:5.2.2'
    shadow 'com.googlecode.soundlibs:tritonus-share:0.3.7.4'
    shadow 'com.googlecode.soundlibs:tritonus-all:0.3.7.2'
    shadow 'com.googlecode.soundlibs:jlayer:1.0.1.4'
    shadow 'com.googlecode.soundlibs:jorbis:0.0.17.4'
    shadow 'com.googlecode.soundlibs:vorbisspi:1.0.3.3'
    shadow 'com.googlecode.soundlibs:basicplayer:3.0.0.0'
    shadow 'com.google.guava:guava:24.1-jre'
    shadow 'org.threeten:threetenbp:1.3.6'
    shadow 'com.google.http-client:google-http-client:1.22.0'
    shadow 'com.google.cloud:google-cloud-texttospeech:2.18.0'
    shadow 'com.google.auth:google-auth-library-oauth2-http:1.16.0'
    shadow 'com.fasterxml.jackson.core:jackson-annotations:2.13.0'
    shadow 'com.fasterxml.jackson.core:jackson-databind:2.12.5'
    shadow 'org.slf4j:slf4j-api:1.7.32'
    shadow 'com.google.code.gson:gson:2.10.1'
}

3. 配置Shadow插件(关键:避免依赖冲突)

添加Shadow配置,将嵌入的依赖重命名到你自己的模组包名下,防止和其他模组的相同依赖版本冲突。同时确保输出的Jar和Fabric Loom生成的Jar一致:

shadowJar {
    // 把第三方依赖包重命名到你的模组ID路径下,替换成你实际的模组ID
    relocate 'com.google', 'your.mod.id.google'
    relocate 'io.github.cdimascio', 'your.mod.id.dotenv'
    relocate 'com.googlecode.soundlibs', 'your.mod.id.soundlibs'
    relocate 'com.fasterxml.jackson', 'your.mod.id.jackson'
    // 其他依赖包同理,逐一添加relocate规则

    // 对齐Loom的Jar命名规则,让build输出的Jar直接是带依赖的模组Jar
    archiveFileName.set("${archivesBaseName}-${project.version}.jar")
    destinationDirectory.set(file('build/libs'))
}

// 让build任务自动执行shadowJar,无需单独调用
build.dependsOn(shadowJar)

4. 验证依赖树(可选但推荐)

执行gradle dependencies命令查看依赖树,检查是否有重复或冲突的依赖。如果存在冲突,可以通过exclude排除冗余依赖,比如:

shadow('com.google.cloud:google-cloud-texttospeech:2.18.0') {
    exclude group: 'com.google.auth', module: 'google-auth-library-oauth2-http'
}

测试打包

执行gradle build,在build/libs目录下生成的Jar就是包含所有依赖的模组Jar,将其放入游戏模组文件夹即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:40:45