Android 多模块(lib)批量打包 aar 上传 maven 仓库实践

简介: 大型项目模块众多时,可配合 gradle.properties 和 settings.gradle 设置开发中依赖 aar 库替换本地模块 从而加快编译速度。publishmaven.sh 还可添加到 ci 任务实现自动打包。

项目结构

project
    |__ app
        |__ build.gradle
    |__ lib_aa                    
        |__ build.gradle
    |__ lib_bb                    
        |__ build.gradle                 
    |__ build.gradle
    |__ gradle.properties
    |__ publishmaven.gradle
    |__ publishmaven.sh
AI 代码解读

封装 maven-publish 的 publishmaven.gradle 脚本:

apply plugin: 'maven-publish'

// 后缀日期
def data = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08:00"))

afterEvaluate { project ->
    try {
        if (publishProjectName != null
                && !publishProjectName.isEmpty()
                && publishProjectName != project.name) {
            return
        }
        def groupId = project.ext["GROUP_ID"]
        def artifactId = project.ext["ARTIFACT_ID"]

        def version = "${app.versionName}-$data-SNAPSHOT"

        println "配置 ${project.name} 工程 maven 打包插件: { groupId : $groupId, artifactId : $artifactId, version : $version } "

        publishing {
            publications {
                release(MavenPublication) {
                    // 可根据自己需求打 debug 包还是 release 包
                    // from project.components.debug
                    from project.components.release
                    it.groupId = groupId
                    it.artifactId = artifactId
                    it.version = version
                }
            }

            repositories {
                maven {
                    allowInsecureProtocol true
                    // 自己的 maven 私服仓库地址
                    url = "http://nexus.devmobile.com/repository/android-snapshots/"
                    credentials {
                        // 自己的 maven 私服账号
                        username = "android"
                        // 自己的 maven 私服密码
                        password = "123456"
                    }
                }
            }
        }
    } catch (Exception e) {
        // 忽略未配置打包信息的 project
    }
}
AI 代码解读

批量打包上传 publishmaven.sh 脚本:

#!/bin/bash

# 全量打包
#./gradlew publish

./gradlew publish -PpublishProjectName=lib_aa

./gradlew publish -PpublishProjectName=lib_bb
AI 代码解读

使用

1. 在主工程的 build.gradle 中配置:

allprojects {
    repositories {
        // maven-publish 下载所需仓库配置
        maven { url 'https://repo1.maven.org/maven2/' }
    }
}
AI 代码解读

2. 在主工程 gradle.properties 中配置:

# 单独为模块或库打包上传,不要加引号,不填时表示所有配置的模块或库都会打包上传,例:  lib_aa
publishProjectName=
AI 代码解读

3. 在子工程 build.gradle 中配置:

apply from: '../publishmaven.gradle'

// 配置此模块上传 maven 的 groupId
this.ext.GROUP_ID = 'com.xxxx.lib'
// 配置此模块上传 maven 的 artifactId
this.ext.ARTIFACT_ID = 'aa'
AI 代码解读

4. 批量打包上传:

./publishmaven.sh
AI 代码解读
目录
打赏
0
0
0
0
1
分享
相关文章
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
115 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
75 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
4月前
|
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
274 11
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
659 3
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
103 5
|
6月前
|
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
392 1
maven 打包命令
maven 打包命令
92 6
|
6月前
|
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
287 4
IDEA如何用maven打包(界面和命令两种方式)
【10月更文挑战第14天】本文介绍了两种Maven项目打包方法:命令行与IDEA界面。首先确保已安装Maven并配置环境变量,通过`mvn -v`检查安装。命令行打包需进入项目目录,执行`mvn package`,之后在`target`目录查看结果。IDEA打包则需配置Maven路径,打开Maven Projects窗口,双击Lifecycle下的`package`阶段,同样在`target`目录查找生成文件,并在Build窗口查看日志以排查问题。
2724 1
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
525 0

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等