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

Github Maven仓库无法拉取传递依赖致App运行报NoClassDefFoundError

解决Gradle同步成功但运行时抛出java.lang.NoClassDefFoundError的问题

看起来你的问题核心在于自定义Maven仓库的SDK依赖没有正确传递它的依赖库,导致运行时找不到对应的类。下面是分步骤的解决方案:

1. 检查SDK的Maven POM文件是否包含传递依赖

当你把AAR上传到GitHub的Maven仓库时,必须同时生成并上传对应的pom.xml文件,这个文件负责告诉Gradle你的SDK依赖了哪些第三方库。如果POM文件缺失或者没有正确声明依赖,Gradle同步时只会拉取你的SDK本身,而不会自动引入它依赖的库,最终导致运行时NoClassDefFoundError。

  • 你可以直接查看GitHub仓库里对应SDK版本的POM文件,确认里面是否有<dependencies>节点,以及节点下是否列出了SDK依赖的所有库(比如Realm、Dagger、RxJava等)。
  • 如果POM文件里没有这些内容,说明你在打包SDK时没有配置Maven发布插件来自动生成依赖信息。

2. 修复SDK的Maven发布配置

在你的SDK项目中,需要使用maven-publish插件来正确生成AAR和包含依赖信息的POM文件。示例配置如下:

apply plugin: 'maven-publish'

publishing {
    publications {
        aar(MavenPublication) {
            // 匹配你在示例项目中使用的groupId、artifactId、version
            groupId 'com.cabfare.android'
            artifactId 'sdk'
            version '0.0.18'

            // 指定要发布的AAR文件
            artifact("$buildDir/outputs/aar/[你的SDK名称]-release.aar")

            // 自动将SDK的implementation依赖写入POM文件
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each { dep ->
                    if (dep.group != null && dep.name != null && dep.version != null) {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', dep.group)
                        dependencyNode.appendNode('artifactId', dep.name)
                        dependencyNode.appendNode('version', dep.version)
                    }
                }
            }
        }
    }
    // 可以先发布到本地仓库,再上传到GitHub
    repositories {
        maven {
            url = uri("file://${project.rootDir}/local-repo")
        }
    }
}

配置完成后,运行./gradlew publish生成AAR和POM文件,再将整个仓库目录上传到GitHub即可。

3. 临时应急方案(快速验证)

如果暂时无法重新发布SDK,可以在示例项目的Module build.gradle中手动添加SDK依赖的所有第三方库。比如,如果SDK依赖了Realm、Dagger、RxJava等,就把这些依赖复制到你的dependencies块中,然后重新运行App,看看NoClassDefFoundError是否消失。

4. 验证仓库配置的正确性

虽然你的Gradle同步成功,但还是可以确认一下仓库配置是否正确:

  • 确保Project build.gradle的allprojects > repositories中添加了你的Maven仓库,这样所有模块都能访问到它。
  • 检查GitHub的raw链接是否能正常访问(可以直接在浏览器中打开链接,确认能下载到AAR和POM文件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:31:35