一、场景
① 公司中有多个项目,多人开发,开发中的某一模块需要被其他几个项目的模块所依赖,最简单粗暴的方式就是打包成aar或者jar文件逐个拷贝到libs下进行依赖,可是这种方式太过于麻烦,而且需要每次都得更新代码。如果有多个这样的库就更麻烦了。所以根据项目规模和需求,为了加快团队开发效率,搭建一个Maven私服就很有必要了。
二、搭建
通过Rexus可以快速方便的搭建一个Maven私服,本篇就讲述通过Rexus搭建Maven私服并上传库文件,以及升级库文件。要开始搭建,首先要下载Rexus:
官网地址 :
网盘链接: 密码: uyev (Window x64)
安装步骤:(不同版本安装的方式会有区别,这个是针对 3.x版本的)
① 下载好的压缩包,进行减压,以管理身份运行cmd,进入到减压后nexus.exe所在目录,键入nexus.exe /install 安装Nexus服务。
② 打开浏览器,打开地址 ,看到下图界面则表示服务启动成功。如果没有启动成功,就需要查看服务是否正常启动。
如果需要更改Nexus的配置,可以在这个文件中更改:
③ 启动成功后,需要登陆账号,默认账号 / 密码: admin / admin123 , 登陆成功以后就要创建我们的maven库,去放置我们的库文件。
④ 登陆成功,创建 repository
1)创建过程中需要选择创建的类型,下面看一下类型区别:
仓库类型 | 说明 |
proxy | 远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用 |
hosted | 宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。 |
group | 仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了 |
根据目前的需求,我们只是要把自己的一些构件放到私库里,所以选择的类型是hosted类型。
2) 创建过程中需要必须操作的一点是:必须更改disable redeploy ——> allow redeploy
3) Artifact type : release \ snapshot
release : 构建的时候构建工具会先在本次仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库中去拉取
snapshot:会优先去远程仓库中查看是否有最新,如果有则下载下来使用,即使本地仓库中已经有了。
到这里nexus搭建maven私服已经基本完毕,剩下的就是要把我们的 library库文件放置到我们已经建好的私服里,并添加依赖使用。
三、使用私有仓库
上面我们创建了reader仓库,仓库地址为 http://localhost:8081/repository/reader。如果把 nexus 安装在了局域网服务器,基本类似,只是仓库地址中的 localhost 改为局域网服务器 ip 。
① 上传库文件
比如我们Android项目中的一个library公共组件,要上传到私库上供其他项目依赖使用。我们需要做的配置:
1. 在该library项目的gradle.properties添加以下配置:
# maven local configmaven_local_url=http://192.168.142.26:8081/repository/reader/maven_local_username=adminmaven_local_password=admin123#common utilsmaven_pom_version=1.0.0maven_pom_groupid=com.dboymaven_pom_artifactId=readermaven_pom_packaging=aarmaven_pom_description=dboy reader # maven_pom_archives_file=libs/CommonUtils.jar 上传某一个jar
说明 :
- maven_local_url maven仓库中相应repository的地址
- maven_local_username 上传类库到仓库的用户名
- maven_local_password 上传类库到仓库的密码
- maven_pom_version 要上传的类库的版本号
- maven_pom_groupid 类库的分组标记,一般使用公司名或包名即可
- maven_pom_artifactId 类库的名称
- maven_pom_packaging 类库的格式可以支持 jar ,aar , so 等
- maven_pom_description 类库描述
- maven_pom_archives_file 类库文件在项目中的位置(相对于 build.gradle)
2. 在相应类库所在的 module 的 build.gradle 增加上传类库的 task
uploadArchives { repositories { mavenDeployer { repository(url: maven_local_url) { authentication(userName: maven_local_username, password: maven_local_password) } pom.project { version maven_pom_version artifactId maven_pom_artifactId groupId maven_pom_groupid packaging maven_pom_packaging description maven_pom_description } } }}
/* artifacts { archives file(maven_pom_archives_file)} */
说明 :
- artifacts 中可以指定要上传的 jar 或 aar 的路径,为统一配置都由 gradle.properties 的属性 maven_pom_archives_file 指定
- 如果只需要上传项目编译时产生的 aar,artifacts 可以省略,因为 artifacts 默认就包含了编译产生的 aar 或 apk
3. 运行上传类库的 task 即可把相应类库上传到仓库 reader ——> gradle uploadArchives ,双击运行
上传成功应该就可以看到上传的类库了。
4. 使用上传的类库
在需要依赖上传类库的项目build.gradle文件添加:
allprojects { repositories { jcenter() maven { url 'http://192.168.142.26:8081/repository/reader/' } }}
在module的build.gradle中就可以像其他的第三方库一样使用:
compile 'com.dboy:reader:1.0.0'
这样我们就可以使用了,很开心伐。但是这个类库是我们自己开发,肯定需要不断去更新,那也就必须要更新私服里的代码,所以接下来说一下更新.
四、更新私有仓库
如果类库需要更新版本,基本操作同上。
比如类库 reader有了新版本为 2.0.0 ,修改 gradle.properties 配置如下(只需要修改版本号,其他不用修改)
maven_pom_version=2.0.0
然后执行 gradle uploadArchives
任务即可
类库更新版本后,不更改 gradle 配置文件自动获取最新类库,添加依赖的方式需要这样添加:(每次都从maven获取最新代码)
dependencies { compile 'com.dboy:reader:1.+'}
或者
dependencies { compile 'com.dboy:reader:+'}
五、参考
六、总结
多个项目使用同一个library,打包成aar ,以前不怕麻烦的就都拷贝了。()结果面试的时候,被问到为什么不搭建一个私服呢。呵,被嫌弃了。不能怕麻烦的勤快。