Maven私服搭建

私服简介

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务器,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。我们去访问这个服务器,这台服务器将需要的构件返回给我们,这台服务器中如果也没有我们需要的构件,那么这个代理服务器会去远程仓库中查找,然后将其先下载到代理服务器中,然后再返回给我们本地的仓库。我们可以也将本地的构件发布到nexus中。

私服的好处

加速maven构件的下载速度

节省宽带,加速项目构建速度

方便部署自己的构件以供他人使用

提高maven的稳定性,中央仓库需要本机能够访问外网,而如果采用私服的方式,只需要本机访问内网私服就可以了。

搭建私服的开源仓库管理软件

Apache基金会的archiva

JFrog的Artifactory

Sonatype的Nexus

安装Nexus私服

Windows安装

1、首先下载安装JDK,配置Java环境变量。

2、下载nexus,官网下载点击:Download,根据操作系统选择对应的文件下载。

3、下载完成后解压到本地计算机中。

4、启动nexus

运行cmd.exe,进入到nexus安装目录bin目录下,输入nexus.exe /run命令。

5、验证结果

浏览器中打开:8081。

6、登录nexus

点击上图右上角的 Sign in ,输入用户名和密码,nexus默认用户名是 admin,密码是第一次启动的时候生成的,密码位于下面的文件中:安装目录/sonatype-work/nexus3/admin.password。

登录后弹出一个修改密码的页面,点击Next-->输入新密码-->Next-->选择是否可以匿名登录-->Next-->Finish。

7、其他常见操作

停止Nexus

启动的cmd窗口中按: ctrl+c ,可以停止Nexus。

修改启动端口

默认端口是8081,如果和本机有冲突,可以在下面的文件中修改:nexus-3.35.0-02etcexus-default.properties。

Linux安装

下载Linux版本的nexus,放在 /opt/nexus/ 目录

解压

[root@test1117 nexus]# tar -zvxf latest-unix.tar.gz [root@test1117 nexus]# ls latest-unix.tar.gznexus-3.19.1-01sonatype-work

启动

[root@test1117 bin]# /opt/nexus/nexus-3.19.1-01/bin/nexus start WARNING: ************************************************************ WARNING: Detected execution as "root" user. This is NOT recommended! WARNING: ************************************************************ Starting nexus

开放端口

在 /etc/sysconfig/iptables 文件中加入下面内容:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT

执行下面的命令,让上面的配置生效:

[root@test1117 bin]# service iptables restart Redirecting to /bin/systemctl restart iptables.service

验证效果

访问http://Linux系统的IP:8081。

登录

用户名为 admin ,密码在/opt/nexus/sonatype-work/nexus3/admin.password,登录后请立即修改密码。

Nexus中仓库的分类

nexus中有个默认自带的仓库列表,里面包含了各种各样的仓库。这些仓库主要分为三类,代理仓库、宿主仓库和仓库组。

代理仓库

代理仓库主要是让使用者通过代理仓库来间接访问外部的第三方远程仓库的。代理仓库会从被代理的仓库中下载构件,缓存在代理仓库中以供maven用户使用。

创建代理仓库

1、nexus仓库列表中点击create repository按钮,如下图:

2、进入添加页面,选择 maven2(proxy) ,这个表示 代理仓库 ,如下图:

3、输入远程仓库的信息,如下图:

第一个红框中输入仓库名称:maven-aliyun 第二个红框选择:Release,表示从这个仓库中下载稳定版的构件 第三个红框输入阿里云仓库地址:https://maven.aliyun.com/repository/public

4、点击底部的 Create repository 按钮,创建完成,如下图:

宿主仓库

宿主仓库主要是给我们自己用的,主要有2点作用:

1. 将私有的一些构件通过nexus中网页的方式上传到宿主仓库中给其他同事使用

2. 将自己开发好一些构件发布到nexus的宿主仓库中以供其他同事使用。

仓库组

maven用户可以从代理仓库和宿主仓库中下载构件至本地仓库,为了方便从多个代理仓库和宿主仓库下载构件,maven提供了仓库组,仓库组中可以有多个代理仓库和宿主仓库,而maven用户只用访问一个仓库组就可以间接地访问这个组内所有的仓库,仓库组中多个仓库是有顺序的,当maven用户从仓库组下载构件时,仓库组会按顺序依次在组内的仓库中查找组件,查找到了立即返回给本地仓库,所以一般情况我们会将速度快的放在前面。仓库组内部实际上是没有构件内容的,他只是起到一个请求转发的作用,将maven用户下载构件的请求转发给组内的其他仓库处理。

nexus默认有个仓库组 maven-public ,如下图:

点击一下 maven-public 这行记录,进去看一下,如下图:

上图中第一个红框是这个仓库组对外的一个url,我们本地的maven可以通过这个url来从仓库组 中下载构件至本地仓库。 第二个红框中是这个仓库组中的成员,目前包含了3个仓库,第1个是宿主的releases版本仓库, 第2个是宿主快照版本的仓库,第3个是代理仓库(maven社区中央仓库的代理)。

刚才我们新增的 maven-aliyun 在左边,我们将其也加到右边的仓库成员( Members )列表,然后将 maven-aliyun 这个仓库放在第3个位置,这个仓库的速度比 maven-central 要快一些,能加速我们下载maven构件的速度,如下图:

最后点击Save,至此仓库组已经配置好了。

配置本地Maven从nexus下载构件

获取仓库组对外的地址,点击下图中的 copy 按钮,获取仓库组的地址。

1、配置pom.xml的方式

配置pom.xml的方式和之前一篇《Maven web项目创建和Maven依赖仓库介绍》中配置远程仓库类似,把远程仓库的URL改为仓库组的URL。不同的时登录私服需要账户密码,可以在maven配置文件settings.xml中加入如下内容:

maven-nexus admin admin123

这里的id要和pom.xml文件配置的私服仓库组id一致。这里的用户密码就是nexus登录的用户密码。

配置完成后,打开cmd.exe,进入Maven项目目录输入mvn compile命令

2、镜像方式配置

修改Maven安装配置文件settings.xml,加入如下内容:

mirror-nexus * nexus镜像 :8081/repository/maven-public/

上面 mirrorOf 配置的 * ,说明所有远程仓库都通过该镜像下载构件。url:这个为nexus中仓库组的地址。

nexus访问需要用户密码,还需加入如下内容:

mirror-nexus admin admin123

配置完成后,打开cmd.exe,进入Maven项目目录输入mvn compile命令,就可以从nexus下载构件了。

本地构件发布到私服

本地构件发布到私服,常用的有两种方式:使用maven部署构件至nexus私服和手动部署第三方构件至nexus私服。exus私服中提供了两个默认的宿主仓库分别用来存放 SNAPSHOT 版本和 release 版本。

使用maven部署构件至nexus私服

1、修改pom.xml配置,加入如下内容:

release-nexus :8081/repository/maven-releases/ nexus私服中宿主仓库->存放/下载稳定版本的构件 snapshot-nexus :8081/repository/maven-snapshots/ nexus私服中宿主仓库->存放/下载快照版本的构件

2、修改Maven安装配置文件settings.xml,加入如下内容:

release-nexus admin admin123 snapshot-nexus admin admin123

这里的id要和pom文件中对应的id保持一致。

3、执行mvn deploy 命令,执行这个命令的时候,会对构件进行打包,然后上传到私服中。

访问私服快照版本仓库地址::8081/repository/maven-snapshots/

点击brower连接,如下图,我们的构件上传成功了。

如果其他同事需要使用上面这个构件,只需要点击下图中的pom文件,右边会显示构件的坐标,然后可以拿去使用了,如下图:

注意:snapshot属于快照版本,同一个snapshot版本的构件可以重复部署到私服中,如果私服中已经存在了则会进行覆盖掉,而release是稳定版本的构件,重复部署会报错。

手动部署第三方构件至nexus私服

手动上传只支持发布稳定版本的构件,操作如下:

图中第一行 maven-releases 宿主仓库就是存放用户自己构件的仓库,点击上图中列表中的第一行,进入上传页面,如下图:

上面页面中点击 Browse 选择本地的构件,然后输入其他坐标信息,点击 Upload 完成上传操作。

访问:8081/#brose/browse:maven-releases,可以看到上传好的构件,如下图: