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

如何将Android Library各Flavor发布到对应独立Maven仓库?

解决Android Library不同Flavor发布到对应仓库的问题

你当前的配置会让两个发布变体推送到所有仓库,这是因为maven-publish默认会为每个发布项和仓库的组合生成发布任务。要实现internalRelease只推送到internal仓库、externalRelease只推送到external仓库,只需添加任务过滤逻辑即可:

修改后的完整配置如下:

flavorDimensions += "version"
productFlavors {
    create("external") {
        dimension = "version"
    }
    create("internal") {
        dimension = "version"
    }
}

publishing {
    singleVariant("externalRelease")
    singleVariant("internalRelease")
}

afterEvaluate {
    val releaseVersion = "1.0.10"
    publishing {
        publications {
            register<MavenPublication>("internalRelease") {
                groupId = "com.company"
                artifactId = "internal"
                version = releaseVersion

                afterEvaluate {
                    from(components["internalRelease"])
                }
            }
            register<MavenPublication>("externalRelease") {
                groupId = "com.company"
                artifactId = "external"
                version = releaseVersion

                afterEvaluate {
                    from(components["externalRelease"])
                }
            }
        }
        repositories {
            maven {
                name = "internal"
                url = uri("https://urltomyinternal")
                authentication {
                    create<BasicAuthentication>("basic")
                }
                credentials {
                    username = project.properties["mavenUsername"].toString()
                    password = project.properties["mavenPassword"].toString()
                }
            }
            maven {
                name = "external"
                url = uri("https://urltomyexternal")
                authentication {
                    create<BasicAuthentication>("basic")
                }
                credentials {
                    username = project.properties["mavenUsername"].toString()
                    password = project.properties["mavenPassword"].toString()
                }
            }
        }
    }

    // 过滤发布任务,只允许对应发布项推送到匹配的仓库
    tasks.withType<PublishToMavenRepository>().configureEach {
        when (publication.name) {
            "internalRelease" -> onlyIf { repository.name == "internal" }
            "externalRelease" -> onlyIf { repository.name == "external" }
        }
    }
}

代码说明:

  • tasks.withType<PublishToMavenRepository>().configureEach:遍历所有Maven发布任务
  • 通过publication.name和repository.name的匹配关系,用onlyIf控制任务是否执行:
    • 当发布项是internalRelease时,仅允许推送到名称为internal的仓库
    • 当发布项是externalRelease时,仅允许推送到名称为external的仓库

这样执行发布时,internalRelease只会推送到内部仓库,externalRelease只会推送到外部仓库,不会出现交叉发布的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:10:31