基于Jitpack发布Clean Architecture架构下指定模块的问题
Jitpack拉取库时依赖未打包导致401错误的分析与解决
问题原因
- Gradle的
implementation依赖不会自动把内部模块打包进发布的AAR里,反而会在生成的POM文件里保留这些模块的依赖声明。 - 你只给
SimpleCalculator和AdvancedCalculator配了maven-publish,但domain、data这些依赖模块没发布到Jitpack,所以拉取主库时,Gradle会尝试从Jitpack拉取这些不存在的模块,直接返回401错误。 - 哪怕是项目内部模块,只要用
implementation引入,POM文件里依然会生成对应的依赖条目,Jitpack没这些模块的发布记录,就会触发权限错误。
解决方法
方法1:把内部依赖打包进主库(生成Fat AAR)
针对Android主库模块,配置Gradle将依赖的内部模块内容合并到最终的AAR中,同时清理POM里的无效依赖声明:
// 在SimpleCalculator/AdvancedCalculator的build.gradle.kts中 android { libraryVariants.all { variant -> variant.outputs.all { (this as com.android.build.gradle.internal.api.BaseVariantOutputImpl).apply { packageLibrary.exclude("META-INF/*.kotlin_module") } } } } dependencies { // 强制内部模块不传递依赖 implementation(project(":domain")) { isTransitive = false } implementation(project(":data")) { isTransitive = false } // 其他内部模块依赖同理设置 } publishing { publications { create<MavenPublication>("release") { from(components["release"]) // 移除POM中所有内部模块的依赖条目 pom { dependencies { removeAll { it.groupId == "com.macro.calculators" } } } } } }
方法2:发布所有依赖模块到Jitpack
如果不想打包成Fat库,就给所有被依赖的内部模块也配置发布:
- 在build logic模块中,给
domain、data、core、di这些模块添加maven-publish插件引用。 - 给每个模块配置
publishing块,指定和主库一致的groupId、自定义artifactId、相同的version(比如com.macro.calculators:domain:0.0.1)。 - Jitpack会自动构建所有关联模块,拉取主库时就能找到对应的依赖模块。
方法3:合并内部模块源码(适合纯JVM模块)
对于纯JVM的domain模块,可以直接把它的源码目录添加到主库的源码配置里,或者用Gradle的includeBuild方式关联,避免生成外部依赖声明,这种方式适合小型内部模块,需要调整项目结构。
内容的提问来源于stack exchange,提问作者MACROSystems
相关产品推荐
相关产品推荐

