如何无需编写庞大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-
相关产品推荐
相关产品推荐

