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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:40:14