前言
什么是maven、gradle?
Maven是一个项目管理和自动构建工具。
Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。
Android支持的Maven仓库:
mavenCentral 是最早的 maven 中央仓库
jcenter 是 Android Studio 0.8 版本起的默认 maven 中央仓库
本机的仓库
部署在内网服务器的私有仓库
一、为什么需要搭建maven私有仓库?
做java开发的童鞋对Maven一定不陌生;做android开发的童鞋,用得最多的是gradle。其实gradle的第三方库,也是放在maven仓库上。
对于第三方库,大家基本都配置maven、gradle从远程获取,估计很少直接下载jar放在工程里(对于没有放在maven repository上的库,只能这么干)。这么做方便管理依赖。
app开发中遇到问题
做app开发,特别是只有几万行代码量的小项目,开发团队也就几个人,通常只用一个工程玩耍。随着业务扩展,工程变得越来越大,代码量大大增加,开发人数也多了,问题开始暴漏:改动一个地方往往影响到其他人的代码,功能模块耦合严重,构建速度慢…
业界一些解决方法:
1.组件化,按功能拆分出各种组件,数据存储、网络层、日志 等;
2.拆分业务,一个业务一个module;
3.业务插件化,一个业务一个工程,每个业务独立编译并运行…
因此,引入依赖管理是必不可少的。把各个模块单独编译,部署上maven仓库,主工程or业务工程通过maven、gradle引用这些依赖。这么做还有好处,就是持续集成!某个模块修改了,跑单元测试,通过后才放上仓库。业务工程同步一下maven,万一有问题,还可以在服务端回滚到上一个版本。
所以我们希望通过搭建一个私有maven仓库,来提高我们的开发效率。
二、 使用Nexus搭建 maven 私服
Nexus是什么?
Nexus是一个基于maven的仓库管理的社区项目.主要的使用场景就是可以在局域网搭建一个maven私服,用来部署第三方公共构件或者作为远程仓库在该局域网的一个代理.简单举几个例子就是:
第三方Jar包可以放在nexus上,项目可以直接通过Url和路径配置直接引用.方便进行统一管理.
同时有多个项目在开发的时候,一些共用基础模块可以单独抽取到nexus上,需要用的项目直接从nexus上拉取就行(基础模块的实现,维护和部署可以交给专门的人员,其他项目不用关心代码实现,这样也可以达到保证核心代码不泄露).
封闭开发的过程中开发机是不能上公网的,所以连接central repository和下载jar就比较麻烦,这时就可以用nexus搭建起来一个介于公网和局域网之间的桥梁
三、所需工具
四、使用Nexus搭建 maven 私库
1、Nexus下载
官网下载地址:https://www.sonatype.com/download-oss-sonatype,我的开发环境是Windows,我下载的是Nexus Repository Manager OSS 2.xx下面的 All platforms nexus-2.14.8-01-bundle.zip压缩文件。
2、Nexus启动
下载完成之后,解压后进入D:\xpkit\other\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin\jsw\windows-x86-64,根据操作系统类型选择文件夹,我选的是windows-x86-64文件夹,进入后可看到如下所示bat文件。
- 把zip包解压到指定路径如“D:\xpkit\other”
- 运行cmd然后进入“D:\xpkit\other\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin\jsw\windows-x86-64”路径
- 运行nexus.bat install命令安装nexus
- 运行nexus.bat start命令启动nexus
- nexus.bat stop停止 nexus.bat restart重启 nexus.bat uninstall卸载
双击console-nexus.bat运行。再浏览器中输入http://127.0.0.1:8081/nexus/,出现如下图所示就代表nexus已经启动成功。
3、登录Nexus
管理nexus要以管理员身份登录,点击首页右上角的login输入默认登录名、密码admin/admin123即可登录。(如果是公司的局域网服务器换成局域网ip地址就可以了)。登录成功就可以看到如下界面了:
这里的仓库分了四种类型:
**hosted(宿主仓库)😗*用来部署自己,第三方或者公共仓库的构件
**proxy(代理仓库)😗*代理远程仓库
**virtual(虚拟仓库)😗*默认提供了一个 Central M1虚拟仓库 用来将maven 2适配为maven 1
**group(仓库组)😗*统一管理多个仓库
名词解释:
Public Repositories: 仓库组
**3rd party: **无法从公共仓库获得的第三方发布版本的构件仓库
**Apache Snapshots: **用了代理ApacheMaven仓库快照版本的构件仓库
Central: 用来代理maven中央仓库中发布版本构件的仓库
Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
**Codehaus Snapshots: **用来代理
**CodehausMaven **仓库的快照版本构件的仓库
Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
**Snapshots:**用来部署管理内部的快照版本构件的宿主类型仓库
4、创建仓库
这里以建立hosted仓库为例简单介绍Nexus在Android开发中的实际使用情况.点击Repositories –> Add –> Hosted Repository,键入ID(部署项目的标识) Name等属性,这里需要注意的是,如果该仓库有多次部署的情况的话,将policy设置为allow redeploy,不然后续在部署的时候会出现403错误。这里我点击添加宿主类型的仓库,在仓库列表的下方会出现新增仓库的配置,如下所示:
点击save按钮后就会在仓库列表中看到刚才新增的仓库。
五、上传库到Maven仓库
1.首先新建一个module,选择Android Library,类似下面这种结构
2.项目的根目录的gradle.properties配置一些相关信息,主要是一些全局的配置信息
3.修改module对应的build.gradle文件,添加以下配置
注意:记得在module对应的build.gradle文件上面添加maven依赖apply plugin: 'maven’
4.点击uploadArchives进行编译上传
5.去仓库查看到刚刚上传的库文件
六、在Android项目中应用Maven库文件
1.新建一个项目,在项目的根目录build.gradle配置如下:
2.在app目录下的build.gradle配置如下:
至此配置就算结束了,就可以在Android项目中应用刚刚上传的Maven库文件了。
Demo下载地址:https://github.com/XieXiePro/MavenDemo
参考:
1,拥抱 Android Studio 之四:Maven 仓库使用与私有仓库搭建
2,使用Gradle和Nexus 搭建私有maven仓库
3,Android的Nexus搭建Maven私有仓库与使用
4,Android业务组件化之Gradle和Sonatype Nexus搭建私有maven仓库
5,Maven私服并结合Android Studio(结合最新版的Nexus)配置详解: