认识Maven仓库
一 什么是Maven仓库
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理。Maven仓库是专门用来存放jar文件的管理工具(也可以用来存放项目war,zip,pom,aar等文件)。Maven仓库中为每个jar文件分配了一个坐标,Maven仓库能很方便的对项目依赖库进行版本的控制。简单地说Maven仓库就是帮我们统一管理项目依赖的工具。
二Maven仓库的作用
用过eclipse开发项目的开发人员,都知道每个项目中往往都有libs这样一个文件夹,
用来存放工程依赖的jar文件。每次建一个新工程时都会有这样一个libs文件夹,然后将需要的jar复制进lib文件夹并执行add path让项目产生依赖,当依赖库有bug修复或者增加功能产生版本更新时,需要挨个项目去替换,很显然有大量的重复工作。
而Maven能够帮我们解决这些问题,自动帮我们完成依赖包的管理,我们需要做的就是指定依赖jar包的名称、版本号。Maven会自动下载,并且递归地去下载依赖包进一步依赖的其它库文件(比如依赖库A库中指定了依赖BCD库,那么当新项目构建时指定依赖了A库时,Maven会自动去下载A,B,C,D库)。同时,如果对于某个依赖库想要始终保持最新而不是频繁去手动更新版本号,也可以指定-SNAPSHOT(快照版本:Maven 每次构建都会在远程仓库中检查新的快照,即使本地已经下载过了此库)。
下图为App-UI-WAR项目依赖APP-Code-lib和APP-Data-lib的配置文件:
三Maven仓库的分类
Maven 仓库有三种类型:
本地(local):每个Maven项目搭建后本地的缓存
中央(central):Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到(https://search.maven.org/search)
远程(remote):Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
四Maven项目完成构建的流程
使用Maven 仓库完成一次构建的流程如下:
先从本地仓库获取;
本地获取不到时中央仓库及其它远程仓库获取;
从远程仓库获取成功后缓存到本地仓库供下次使用,如果配置的远程仓库遍历后都找不到,将停止Build并报错:无法找到依赖的文件。
Maven 仓库默认在国外, 国内使用难免很慢,我们通常会配置一个国内的远程镜像仓库,如阿里云的Maven仓库:http://maven.aliyun.com/nexus/content/groups/public/。
为什么要搭建局域网仓库
上面我们清楚地了Maven库的工作流程,其实已经很明显了,搭建局域网仓库,就是给团队(部门、小组、公司)开一个私服,在中间做代理仓库和二级缓存。
节省自己的外网宽带【多终端只需下一次】
加速Maven构建【局域网走内网,下载较快】
部署第三方构件【私有化的、业务相关、有版权限制的等】
增强控制【多人员,多项目可以做统一配置管理】
降低中央仓库的负荷【毕竟人家Maven、阿里云镜像都没盈利的,带宽都是钱,能省则省吧】
增强稳定性【突发情况公司断网或者中央仓库出现故障】
既然在局域网搭建私服有这么多的好处,那么怎么去实现这一目标呢?接下来就是今天的主角nexus上场了。
nexus是什么
nexus可不是Google的亲儿子NEXUS品牌手机,而是一个......
专业描述:
nexus是一个强大的maven仓库管理器,它极大的简化了本地内部仓库的维护和外部仓库的访问。
nexus是一套开箱即用的系统不需要数据库,它使用文件系统加Lucene来组织数据。
nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过IDEA和Eclipse集成使用。
nexus支持webDAV与LDAP安全身份认证。
nexus提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,占用较少的内存,基于简单文件系统而非数据库。
简单描述:
nexus就是帮你快速搭建并管理Maven库的一个好工具,不管你是要搭建一个内网私服还是要做一个公网镜像站,nexus都将是你最好的选择。国内开发常用到的http://maven.aliyun.com/nexus/content/groups/public/就是用nexus搭建的。
如何正确的使用nexus搭建一个局域网仓库
一 下载和安装
下载
官方下载页:https://www.sonatype.com/download-oss-sonatype
The world's first and only universal artifact repository that's FREE to use.
世界上第一个也是唯一一个免费提供的通用工件存储库。
这首页的宣传语也是厉害了。
!由于是国外的网站,所以访问时挺不稳定的,也是经历了许多破折,最终来到了下载页,支持windows,unix(包括linux),mac这三个版本;
实际下载时由于频繁中断,最后还是科学上网下载完成,这里给出Windows版本的3.29.2-02版本网盘链接(截至目前还是最新版本,如果后续还有更新,大家只能去官网下了)。
链接:https://pan.baidu.com/s/1pDiiQ41MkNwzJuPFrwtrDw
提取码:NEXU
官网下载地址:https://help.sonatype.com/repomanager3/product-information/download
安装
相比较于下载,安装就方便多了,直接找到下载的压缩包,解压缩到自己指定的目录即可(文件夹及目录避免用中文)
然后将nexus安装目录(nexus\nexus-3.29.2-02\bin)中的bin文件夹配置到环境变量Path中去,方便后面调用启动服务。
二 启动服务
配置好环境变量后就可以直接在命令行执行nexus命令了。
nexus /start
如果你了解过或者看过网上其他人的博客,基本都是先调用nexus install,再调用nexus start,然而却发现没有install和start命令。不要慌,版本不一样命令变了很正常,命令行找不到已经要记得先--help一下:
使用之前通过nexus /install命令安装私服,然后通过nexus /start启动私服,看到下图Started Sonatype Nexus OSS 3.29.2-02提示就是服务正常启动了。nexus私服有自己内置的服务器,默认的访问端口号是8081,访问地址是:http://localhost:8081/.
登录并重置密码
之前看大家都说默认帐号是admin,默认密码admin123;然而我去登录了却发现并不是那么回事儿,原来改版后不是默认密码了,而是随机生成了一长串密码放在了一个隐秘的角落。
按照提示找到admin.password文件,打开获取默认密码,登录成功;
按照提示设置更新新密码;
按照提示继续设置,建议选择Enable,启用匿名访问权限,方便后面其它机器访问;
初始化完成
三 配置
1. 查看所有仓库
点击设置图标,选择Repository-Repositories,可以看到nexus默认给我们添加了这些仓库。
hosted 宿主仓库,用来发布一些私有化、第三方不允许的组件,比如oracle驱动等商业软件的jar包
proxy 代理远程的仓库,比如上面写得三个maven远程仓库。如果本地不存在某些jar文件时就会到这些代理站点去下载。
releases 内部的模块中release模块的发布仓库
snapshots 发布内部的snapshot模块的仓库
group 组仓库,用来添加其他的仓库,方便开发人员设置【如上面maven-public是包含了maven-central和maven-releases、maven-snapshots】
2. 修改仓库配置
点击maven-central一行,可以进入设置页,可以删除仓库、重建索引、清除缓存、禁止健康检查;
注意Online要勾选,否则停止更新下载,会影响依赖库的下载;
可更改Proxy代理服务器地址,nexus默认的代理地址是https://repo1.maven.org/maven2/,如果想访问更快可以选择更改为国内代理地址;更推荐增加新的仓库地址,并将国内服务放在前面;
3. 添加新的仓库
选择Create repository新建仓库,选择Maven2(proxy),填入Name和Proxy信息,滚动到最底部有Save保存按钮。
如这些代理仓库
http://maven.aliyun.com/nexus/content/repositories/jcenter
http://maven.aliyun.com/nexus/content/repositories/google
http://maven.aliyun.com/nexus/content/repositories/gradle-plugin
http://maven.aliyun.com/nexus/content/groups/public/
保存成功过后会看到列表新增了自己的仓库。nexus服务正在对新增的镜像站进行健康检查,通过后状态变为可用。
4. 修改仓库组
通过检查变为可用状态的仓库,可以在marven-public(也可以新建仓库组maven2 group)中编辑仓库组包含哪几个仓库,可以调换优先级,将使用多的,访问速度快仓库放前面可以增加项目的构建速度。
四 使用
使用前记得更新一下所有仓库的索引(索引相当于仓库中所有依赖包的目录,更新较慢)
找到你要引用的仓库,通常是maven-public,点击copy按钮
获取到仓库地址,配置到你的项目中即可。
不同的编译器(Android StudioEclipse/NetBeans/IntelliJ等)配置方法不同,这里演示的是在Android studio中build.gradle文件的配置
使用效果
配置后执行sync ,同步成功,build成功。
之后再回到http://localhost:8081/#browse/browse,查看maven-public仓库,发现已经多了许多目录和库文件。表示私有化仓库已经开始工作并缓存文件了。
选择Seach按钮,搜索eventbus,可以搜索到,点击还可以查看它的具体版本信息和来源及大小。
此时再将公司网络中断,项目clean,rebuild,甚至添加新的依赖(即使本项目中未用过,只要私有库下载过一次)就再也不用因为网络问题导致项目无法build了。
结束语
实际下载时由于频繁中断,最后还是科学上网下载完成,这里给出Windows版本的3.29.2-02版本网盘链接(截至目前2021年1月还是最新版本,如果后续还有更新,大家只能直接去官网下载,感谢度娘提供的免费云盘服务)。
链接:https://pan.baidu.com/s/1pDiiQ41MkNwzJuPFrwtrDw
提取码:NEXU
参考
菜鸟Maven 仓库https://www.runoob.com/maven/maven-repositories.html
官方下载页:https://www.sonatype.com/download-oss-sonatype
Windows下安装Nexus3.x及配置 https://blog.csdn.net/yzhl008/article/details/105409293/
Nexus3.x安装及配置 https://cloud.tencent.com/developer/article/1147232
NexusMaven管理器 https://www.oschina.net/p/nexus