一. 概述
Nexus是一个基于maven的仓库管理的社区项目.主要的使用场景就是可以在局域网搭建一个maven私服,用来部署第三方公共构件或者作为远程仓库在该局域网的一个代理.简单举几个例子就是:
1.第三方Jar包可以放在nexus上,项目可以直接通过Url和路径配置直接引用.方便进行统一管理。
2.同时有多个项目在开发的时候,一些共用基础模块可以单独抽取到nexus上,需要用的项目直接从nexus上拉取就行(基础模块的实现,维护和部署可以交给专门的人员,其他项目不用关心代码实现,这样也可以达到保证核心代码不泄露)。
3.一些封闭开发的过程中开发机是不能上公网的,所以连接central repository和下载jar就比较麻烦,这时就可以用nexus搭建起来一个介于公网和局域网之间的桥梁。
接下来就简单介绍一下nexus的搭建以及在android项目中使用nexus的方式。
二. 搭建
1.下载&配置
这里使用的是Nexus OSS开源版,官网下载地址:http://www.sonatype.org/nexus/go/ ,博主的开发环境是ubuntu,所以就下载的TGZ压缩的。
把压缩包解压之后进入bin文件夹就可以运行shell脚本来启动nexus,通过查看bin/nexus脚本发现可以修改脚本来适配自己的需求,例如修改Nexus的root路径,如果需要以root身份来启动Nexus就需要设置RUN_AS_USER=root,设置app名字和登陆名字等.也可以去conf/nexus.properties文件修改端口之类的信息。
接下来直接运行Nexus脚本,查看一下该脚本支持几个参数命令,将Nexus启动起来(在这之前博主的Nexus已经启动了所以就用的restart)
2.创建仓库
从状态上来看nexus已经启动起来了,Nexus启动之后就可以在浏览器访问类似 192.168.9.190:9999/nexus/ 地址,其中ip为当前服务器ip,端口Nexus默认为8081,可以在conf/nexus.properties文件中修改端口.进入web管理页面后右上角登陆,Nexus默认的账号密码是admin:admin123,然后点击左侧的repositories查看现有的仓库列表。
这里的仓库分了四种类型
1.hosted(宿主仓库):用来部署自己,第三方或者公共仓库的构件
2.proxy(代理仓库):代理远程仓库
3.virtual(虚拟仓库):默认提供了一个 Central M1虚拟仓库 用来将maven 2适配为maven 1
4.group(仓库组):统一管理多个仓库
这里以建立hosted仓库为例简单介绍Nexus在Android开发中的实际使用情况.点击repositories->add 键入ID(部署项目的标识) Name等属性,这里需要注意的是,如果该仓库有多次部署的情况的话,将policy设置为allow redeploy,不然后续在部署的时候会出现403错误。
建立好新的仓库之后需要配置一下相关账号信息.在安全选项下选择用户选项,可以看到三个默认的账号,分别是管理员账号,部署账号和Nexus账号.正常访问仓库内容的时候是不需要这三个账户的,一般也就是把部署账号暴露出去,方便仓库项目维护人员部署项目使用.所以这里可以用默认的Deployment账户(记得reset下密码).也可以新建一个账号来使用,新建的时候可以通过add role management来控制该账号的权限。
回到repositories选项就可以看到新建出来的仓库,点击仓库URL可以直接进入到仓库路径,当然现在还没有部署项目.到此为止搭建Maven私服Nexus端的配置和部署都已经完成,下面开始介绍Nexus Android端的配置部署和应用.
3.Android端私服仓库应用
这里就拿之前分析过的Android 4.4原生DeckClock程序举例.Android 4.4 中的DeckClock项目需要依赖framework下的一个名叫datetimepicker的库工程.这里就把这个datetimepicker工程部署到Nexus上,让DeskClock根据仓库url和路径进行访问和datetimepicker版本控制。
首先在DeskClock项目的build.gradle中配置之前建立的仓库。
- allprojects {
- repositories {
- jcenter()
- mavenLocal()
- }
- dependencies{
- repositories {
- maven { url 'http://192.168.9.190:9999/nexus/content/repositories/jesse/' }
- }
- }
- }
接下来需要从项目中把datetimepicker模块剥离出来,因为我们要把它单独部署到刚刚配置的仓库里,DeskClock项目直接依赖datetimepicker模块改为通过Nexus依赖.剥离之后在datetimepicker模块中的build.gradle文件中使用uploadArchives方法向指定仓库上传有效的aar文件.并且配置pom文件信息.目前配置是默认走repository中的仓库,如果在版本号后面加上-SNAPSHOT就会走snapshotRepository中的仓库.artifactId是该模块的名字,groupId是仓库包名路径。
- uploadArchives {
- repositories {
- mavenDeployer {
- snapshotRepository(url: 'http://192.168.9.190:8081/nexus/content/repositories/jesse-snapshot/') {
- authentication(userName: 'Jesse', password: 'jesse')
- }
- repository(url: 'http://192.168.9.190:8081/nexus/content/repositories/jesse/') {
- authentication(userName: 'Jesse', password: 'jesse')
- }
- pom.project {
- version '1.0.2'
- artifactId 'datetimepicker'
- groupId 'cn.jesse.android'
- packaging 'aar'
- description 'dependences lib'
- }
- }
- }
- }
- artifacts {
- archives file('datetimepicker.aar')
- }
在Android Studio的Gradle project插件中选中datetimepicker模块运行uploadArchives任务就可以将该模块的aar文件以1.0.2的版本部署到Nexus上,供其他项目引用。
将datetimepicker部署到Nexus上之后,就可以在主模块的build.gradle直接通过部署时设置的groupId和version建立与datetimepicker之间的依赖。
- dependencies {
- compile 'cn.jesse.android:datetimepicker:1.0.2'
- }
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。