如何将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
相关产品推荐
相关产品推荐

