在 Java EE 开发中,我们使用 Maven 构建工具主要来管理项目的第三方库的依赖,以及公司内部其他项目服务的依赖。因此 Maven 私服就是必不可少的一环,本文主要对 Maven 私服的三大方面进行介绍:
什么是 Maven 私服
如何搭建 Maven 私服
如何使用 Maven 私服
本文面对的读者应有 Maven 使用经验,了解 Maven 的一些基本概念,如果不太熟悉可以参见文末的参考资料学习。
什么是 Maven 私服在介绍 Maven 私服之前,我们首先清楚下什么是 Maven 仓库。
Maven 仓库:Maven 统一存储所有Maven项目依赖,插件,以及所上传项目的地方。
并且 Maven 仓库还分成两类:本地仓库和远程仓库。
本地仓库,就是我们本地电脑安装Maven后,在 配置文件 setting.xml 里 localRepository 所需要指定目录的那个文件夹。
远程仓库,就是在外部网络里(包括局域网)指定 URL 的专门存放 Java 库,Maven插件等的服务器,,例如中央仓库,就是一个典型的远程仓库,它包含了世界上绝大多数开源的 Java 库,类似的还有许多其他的公开库
而本文提到的私服,就是另一种特殊的远程仓库,它通常架设在局域网内的一台服务器上,用于代理所有外部的远程仓库,并且能接受内部项目的上传和获取。
而这些仓库又有是什么用呢?当 Maven 项目需要依赖一些其他项目的 Java 库时,Maven 首先会在本地仓库查找,如果存在对应的库,就直接使用;如果本地仓库不存在,Maven 就会去远程仓库查找,找到对应的 Java 库后下载到本地仓库再使用,以便于下次需要该Java库时,直接使用缓存在本地仓库的依赖库即可,省去了重复通过网络查找并下载的时间,对于 Maven 插件也是同样的过程。
通常情况下,中央仓库是Maven 默认的远程仓库,而当引入了私服后,本地仓库查找结束未找到所需要的依赖库时,就先从私服仓库开始查找,仍未找到的话,最后再去中央仓库查找,具体过程可以参考下图:
在这里我们再看下私服的作用有哪些:
内网访问,节省外网带宽。
一次外网下载,内网所有用户就可以只下载私服缓存,加速 Maven 项目构建。
允许上传和下载私有库,并且不被外部访问,更加安全。
减少外部网络因素,提供项目构建的稳定性。
方便内部项目服务的依赖引用,而不需要其他项目的完整源代码。
这里对最后一小点的作用添加下具体描述:当我们有独立的两个Maven 项目,比如订单服务项目和会员服务项目,其中订单服务项目需要会员服务,依赖会员服务的 API 包,通过私服可以将编译后的会员服务的 API 包上传,然后订单服务程序直接下载引用私服上的会员服务 API 包即可,这样就不需要导入会员服务项目代码,也不用关心会员服务具体实现了,起到了内部服务项目轻度引用的作用,描述可参见下图。
搭建 Maven 私服了解 Maven 私服之后,我们进一步学习。我们首先来搭建一个 Maven 私服。在这里我们使用最流行的开源 Maven 仓库管理软件 - Nexus,来快速搭建 Maven 私服,传统的搭建方式为在 Nexus 官网上下载开源版的 Nexus OSS 进行安装:https://www.sonatype.com/nexus-repository-oss。而本文将采用 Docker 方式安装 Nexus,不仅快速简单,而占用更少的机器资源。
如果对 Docker 不熟悉的同学,可以参见 10分钟快速掌握Docker必备基础知识 学习了解下,简单使用 Docker 也是十分容易的。
下载 Nexus 镜像在终端控制台上使用 Docker 指令下载 Nexus 官方提供的Docker 镜像:
看到下图结果时,就表示镜像下载完成,可以通过 docker images 查看。
启动 Nexus 容器使用下方指令启动 Nexus 容器:
在这里对输入的 Docker 指令的参数进行简单的说明:
-d 表示让容器后台运行。
-p 8081:8081 表示了容器启动时开放内部端口 8081(后者的8081) 映射主机端口的 8081 ,即通过 localhost:8081 可以访问到 Nexus 容器所提供的服务。