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

如何无需编写庞大Gradle脚本,构建Android多模块库并发布至Maven仓库?

构建并发布所有Android模块到Maven仓库(无庞大脚本)

核心思路:复用Gradle内置机制+Android插件原生发布能力

无需编写重复模块脚本,通过项目级统一配置,结合Android Gradle插件自带的发布组件,就能实现批量发布需求。

步骤1:项目根目录统一配置发布逻辑

在项目根目录的build.gradle.kts(或Groovy版build.gradle)中,通过subprojects批量为所有Android库模块注入发布配置:

Kotlin DSL 示例

subprojects {
    plugins.withId("com.android.library") { // 仅针对Android库模块生效
        apply(plugin = "maven-publish")

        configure<PublishingExtension> {
            publications {
                create<MavenPublication>("release") {
                    // 关联Android的release变体产物
                    from(components["release"])

                    // 动态设置Maven坐标(可根据模块调整)
                    groupId = "com.yourcompany"
                    artifactId = project.name
                    version = "1.0.0"

                    // 可选:生成源码和Javadoc制品(提升仓库可用性)
                    val android = project.extensions.getByType<AndroidLibraryExtension>()
                    val sourcesJar by tasks.registering(Jar::class) {
                        archiveClassifier.set("sources")
                        from(android.sourceSets.getByName("main").java.srcDirs)
                    }
                    val javadocJar by tasks.registering(Jar::class) {
                        archiveClassifier.set("javadoc")
                        from(tasks.named("javadoc"))
                    }
                    artifact(sourcesJar)
                    artifact(javadocJar)
                }
            }

            // 配置目标Maven仓库
            repositories {
                maven {
                    url = uri("https://your-maven-repo-url.com/repository")
                    // 通过环境变量传递凭据,避免硬编码
                    credentials {
                        username = System.getenv("MAVEN_USER")
                        password = System.getenv("MAVEN_PWD")
                    }
                }
            }
        }
    }
}

Groovy DSL 示例

subprojects {
    if (plugins.hasPlugin('com.android.library')) {
        apply plugin: 'maven-publish'

        publishing {
            publications {
                release(MavenPublication) {
                    from components.release

                    groupId = 'com.yourcompany'
                    artifactId = project.name
                    version = '1.0.0'

                    // 生成源码和Javadoc
                    def android = project.extensions.getByType(com.android.build.gradle.LibraryExtension)
                    def sourcesJar = tasks.register('sourcesJar', Jar) {
                        classifier = 'sources'
                        from android.sourceSets.main.java.srcDirs
                    }
                    def javadocJar = tasks.register('javadocJar', Jar) {
                        classifier = 'javadoc'
                        from tasks.javadoc
                    }
                    artifact sourcesJar
                    artifact javadocJar
                }
            }

            repositories {
                maven {
                    url = uri('https://your-maven-repo-url.com/repository')
                    credentials {
                        username = System.getenv('MAVEN_USER')
                        password = System.getenv('MAVEN_PWD')
                    }
                }
            }
        }
    }
}

步骤2:执行内置发布任务

配置完成后,直接调用Gradle内置任务完成批量发布:

  • 发布所有模块的release版本:./gradlew publishAllPublicationsToMavenRepository
  • 发布单个模块:./gradlew :module-name:publishReleasePublicationToMavenRepository

关键优势

  • 无冗余脚本:所有Android库模块自动继承配置,无需逐个模块编写发布逻辑
  • 纯内置实现:完全依赖maven-publish插件和Android插件的原生组件,无自定义复杂任务
  • 灵活适配:可通过project.name、环境变量动态调整坐标、仓库信息,适配不同模块需求

注意事项

  • 仅支持Android库模块(com.android.library插件),应用模块(com.android.application)无法发布为Maven制品
  • 仓库凭据建议通过环境变量传递,避免硬编码在脚本中
  • 若需多变体发布(如debug版本),可在publications中添加对应变体的配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:55:19