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即可
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依赖