Android_SpeakAndroid 闲谈Android知识

Android Studio发布及依赖Maven项目

2017-04-25  本文已影响2962人  大鹏说说看

1、前言:

由于项目的特殊性,封装了很多基础功能的实现,随着使用这些基础功能的项目增多,对于基础功能代码的版本管理出现了问题,思考后选择发布到Maven仓库,项目中远程依赖这些基础功能的方式解决此问题。

1.1、目标构建流程:

整体思路

解释一下:
1、项目工程、LIB工程的代码管理仍使用GIT
2、项目工程不直接依赖LIB工程,而是使用远程依赖,从远程仓库中(Nexus为远程仓库的一种)获取LIB工程生成的AAR或JAR
3、LIB工程的发布由Jenkins等自动化工具进行(手动发布也可以但不方便管理)

2、准备工作:

所需要的环境有:AndroidStudio、Nexus、GIT、Jenkins,其中,AndroidStudio、Nexus是必须的,GIT和Jenkins根据实际需要选择

2.1、搭建Nexus:

下载地址:https://www.sonatype.com/download-oss-sonatype
博主已Mac为例,下载后解压,运行以下命令则启动了nexus

cd nexus-3.3.0-01/bin
./nexus start

nexus的其他命令可通过 ./nexus -help 查看
浏览器访问:http://localhost:8081/ 打开nexus管理界面
默认账号:amdin 密码:admin123
下图的仓库地址,我们后面将用到。

获取仓库地址

3、Studio配置Maven

这里会分两部分讲,
1:LIB项目发布到仓库
2:工程项目配置对LIB项目的依赖

3.1、LIB项目发布到仓库

3.1.1、找到项目根目录的gradle.properties,添加以下公共常量,此处的仓库地址就是从2.1的图中位置获取

#maven仓库地址
MAVEN_REPO_RELEASE_URL=http://localhost:8081/repository/maven-releases/
MAVEN_REPO_SNAPSHOT_URL=http://localhost:8081/repository/maven-snapshots/
#登录nexus ossde的用户名
NEXUS_USERNAME=admin
#登录nexus oss的密码
NEXUS_PASSWORD=admin123
# groupid
GROUP_ID=com.ydp
# type jar或aar
TYPE=jar
# 项目描述
DESCRIPTION=Maven Test Lib

3.1.2、找到项目根目录的build.gradle,此处配置所有项目公用的脚本

//对所有项目配置依赖的仓库地址
allprojects {
    repositories {
        jcenter()
        maven { url MAVEN_REPO_SNAPSHOT_URL }
        maven { url MAVEN_REPO_RELEASE_URL }
    }
}
//对所有子项目配置
subprojects {
    apply plugin: 'com.android.library'
    apply plugin: 'maven'
    uploadArchives {
        configuration = configurations.archives
        repositories {
            mavenDeployer {
                //配置发布到的仓库地址
                snapshotRepository(url: MAVEN_REPO_SNAPSHOT_URL) {
                    authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                }
                repository(url: MAVEN_REPO_RELEASE_URL) {
                    authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                }
                //项目属性
                pom.project {
                    //GROUPID+artifactId在maven中确定唯一位置
                    groupId GROUP_ID
                    //打包方式
                    packaging TYPE
                    //描述
                    description DESCRIPTION
                }
            }
        }
        task androidSourcesJar(type: Jar) {
            classifier = 'sources'
            from android.sourceSets.main.java.sourceFiles
        }
        artifacts {
            archives androidSourcesJar
        }
    }
}

3.1.3、找到要发布的某个module目录下的build.gradle文件

//在此处复写uploadArchives,用来配置module中不同的脚本
apply plugin: 'maven'
uploadArchives {
    repositories {
        mavenDeployer {
            pom.project {
                //版本号由各个子项目进行独立配置
                //后缀加-SNAPSHOT则为快照版本,去掉为release版本,会发布至不同仓库
                version '1.0.0-SNAPSHOT'
                //artifactId使用项目名
                artifactId 'testlib'
            }
        }
    }
}
//执行此task,将此module进行发布
task deploy(dependsOn: uploadArchives) {}

3.1.4、发布module
执行 指定module的 deploy即可

执行指定task

3.2、工程项目配置对LIB项目的依赖

3.2.1、找到项目根目录的gradle.properties,添加以下公共常量,此处的地址就是从2.1的图中位置获取

MAVEN_REPO_RELEASE_URL=http://localhost:8081/repository/maven-releases/
MAVEN_REPO_SNAPSHOT_URL=http://localhost:8081/repository/maven-snapshots/

3.2.2、找到项目根目录的build.gradle,此处配置所有项目公用的脚本

//对所有项目配置依赖的仓库地址
allprojects {
    repositories {
        jcenter()
        maven { url MAVEN_REPO_SNAPSHOT_URL }
        maven { url MAVEN_REPO_RELEASE_URL }
    }
}

3.2.3、找到项目工程需要依赖LIB工程的module目录下的build.gradle

dependencies {
    ....
    //此处规则为groupid:artifactId:版本号
    //版本号使用+或-SNAPSHOT表示使用最新的快照版本,发版时推荐使用release版本
    compile 'com.ydp:testlib:1.0+'
}

3.2.4、强制刷新依赖
由于gradle依赖下载后存在本地缓存,如果使用的快照版本则不会随着build而每次更新,如果需轻质刷新依赖,需要执行以下命令:

gradle build --refresh-dependencies

至此,完成了仓库搭建、LIB发布、LIB依赖

上一篇下一篇

猜你喜欢

热点阅读