一、概念
1.私服简介
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务
,私服代理广域网上的远程仓库
,供局域网内的Maven用户使用
。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
2.私服的好处
-
加速maven构件的下载速度
-
节省宽带,加速项目构建速度
-
方便部署自己的构件以供他人使用
-
提高maven的稳定性,中央仓库需要本机能够访问外网,而如果采用私服的方式,只需要本机访问内网私服就可以了。
3.搭建私服的开源仓库管理软件
(1)Apache基金会的archiva
http://archiva.apache.org/
(2)JFrog的Artifactory
https://jfrog.com/artifactory/
(3)Sonatype的Nexus
https://my.sonatype.com/
这些都是开源的私服软件,都可以自由使用。用的最多的是第三种Nexus
,本文我们主要以这个来讲解.。
二、使用Nexus搭建Maven私服(Windows环境)
nexus是java开发的,所以运行的时候需要有java环境的支持。
1.安装jdk
确保使用系统中安装了jdk,若没有进行下载安装。
2.下载即安装Nexus
2.1 下载
Nexus官方下载地址:https://help.sonatype.com/repomanager3/download
点击复制下载链接,使用迅雷方式下载,下载速度比较快。
2.2 下载完成后进行解压
2.3.启动nexus
启动服务:切换到D:\nexus-3.40.1-01-win64\nexus-3.40.1-01\bin目录下,输入 nexus.exe /run
如下信息表示安装成功:
2.4.访问nexus首页
浏览器打开,输入 http://localhost:8081/
效果如下:
注意:如果服务器的8081端口没有放开,则访问不了 nexus 首页;比如阿里云服务器需要在安全组里面打开 8081 端口。
3.初始设置
3.1 登录Nexus
点击右上角的 Sign in,输入用户名和密码。nexus默认用户名是admin。
nexus密码是第一次启动的时候生成的,密码位于下面的文件中:
D:\nexus-3.40.1-01-win64\sonatype-work\nexus3\admin.password
3.2 初始设置
登录成功后会弹出一些设置,如下:
点击Next,设置新的登录密码(新密码要保存好),如下:
启用或禁用匿名登陆:
区别:
启用匿名登录则在使用该 nexus 时,不需要账号密码;
禁用匿名登录则在使用该 nexus 时,需要账号密码。
也就是 maven 的 settings.xml 文件中,配置使用该 nexus 时,是否需要配置账号密码信息。
点击FInish,完成设置:
三、Nexus中的仓库分类
用户可以通过nexus去访问远程仓库,可以将本地的构件发布到nexus中,nexus是如何支撑这些操作的呢?
nexus中有个仓库列表,里面包含了各种各样的仓库,如下图:
上图中是nexus安装好默认自带的仓库列表,主要有3种类型:
-
代理仓库:代理公共的远程仓库
-
宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件
-
仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库
1.代理仓库
1.1 概念
代理仓库主要是让使用者通过代理仓库来间接的访问外部的第三方远程仓库的
,如通过代理仓库访问maven中央仓库
、阿里的maven仓库
等等。代理仓库会从被代理的仓库中下载构件,缓存在代理仓库中以供maven用户使用。
2.创建代理仓库
(1)在仓库列表页面,点击“Create repository”按钮,如下:
进入添加页面,选择maven2(proxy)
,这个表示代理仓库
,如下图:
输入远程仓库的信息,如下:
点击底部的‘Create repository",创建完成,如下:
在仓库列表中可以看到创建的仓库:
2.宿主仓库
宿主仓库主要是给我们自己用的,主要有2点作用:
-
将私有的一些构件通过nexus中网页的方式上传到宿主仓库中给其他同事使用
-
将自己开发好一些构件发布到nexus的宿主仓库中以供其他同事使用
3.仓库组
maven用户可以从代理仓库和宿主仓库中下载构件至本地仓库,为了方便从多个代理仓库和宿主仓库下载构件,maven提供了仓库组
。
仓库组中可以有多个代理仓库和宿主仓库,而maven用户只用访问一个仓库组就可以间接的访问这个组内所有的仓库,仓库组中多个仓库是有顺序的
,当maven用户从仓库组下载构件时,仓库组会按顺序依次在组内的仓库中查找组件,查找到了立即返回给本地仓库,所以一般情况我们会将速度快的放在前面。
仓库组内部实际上是没有构件内容的,他只是起到一个请求转发的作用,将maven用户下载构件的请求转发给组内的其他仓库处理。
nexus默认有个仓库组maven-public,如下:
点击一下maven-public这行记录,进去看一下,如下:
上面的URL是 仓库组对外的一个url,我们本地的maven可以通过这个url来从仓库组中下载构件至本地仓库。
上面的红框中是仓库组中的成员,目前包含了3个仓库,第1个是宿主的releases版本仓库,第2个是宿主快照版本的仓库,第3个是代理仓库(maven社区中央仓库的代理)。
刚才我们新增的maven-aliyun
在左边,我们将其也加到右边的仓库成员(Members)列表,然后将maven-aliyun这个仓库放在第3个位置,这个仓库的速度比maven-central要快一些,能加速我们下载maven构件的速度,如下图:
四、配置本地maven从nexus下载构件
从 Nexus 私服下载构件的配置方法共有三种
1.方式1:pom.xml方式
以 从nexus默认仓库组中下载构件,先获取仓库组对外的地址,点击下图中的copy
按钮,获取仓库组的地址:
修改项目中的pom.xml,加入如下内容:
<!--配置仓库-->
<repositories>
<repository>
<id>maven-nexus</id>
<!--maven私服仓库组的地址-->
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!--配置插件仓库-->
<pluginRepositories>
<pluginRepository>
<id>maven-nexus</id>
<!--maven私服仓库组的地址-->
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
注意:分别配置仓库和插件仓库
由于nexus私服需要有用户名和密码登录才能访问,所以需要有凭证,凭证需要在settings.xml文件中配置,在~.m2\settings.xml文件中的servers元素中加入如下内容:
<server>
<id>maven-nexus</id>
<username>admin</usernam