前言

私服是指私有服务器,是在局域网的一种特殊的远程仓库,目的就是代理远程仓库及部署第三方构建,有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库,否则,私服将请求外部的远程仓库,将构件下载到私服,在提供给本地仓库下载。

Nexus 介绍

nexus 是一个强大的 Maven 仓库管理器,可以做私服,它极大的简化了本地内部仓库的维护和外部仓库的访问。

nexus 是一套开箱即用的系统,不需要数据库,它使用文件系统加 Lucene 来组织数据。

支持 WebDAV 与 LDAP 安全身份认证。

提供了强大的仓库管理功能,构件搜索功能。

搭建步骤

首先下载安装包,官网地址:https://www.sonatype.com/product/repository-oss-download

在国内,可能会打不开,或者下载龟速,所以提供了安装包!

nexus-3.30.0-01-win64.zip

下载完成之后进行解压到任意磁盘,无需安装

进入 bin 目录下运行 cmd

directory

输入 nexus /run

cmd

启动成功之后打开浏览器访问 http://localhost:8081/,默认端口是 8081,修改端口在 nexus-3.30.0-01\etc\nexus-default.properties 文件

images

初始化完成之后点击 Sign in 登陆,默认账号是 admin,默认密码在 sonatype-work\nexus3 下的 admin.password 文件

登录成功之后会要求你重新设置一个新的密码

接着添加阿里云仓库,如图

add-aliyun

在页面取名叫 aliyun-repository(建议用 a 开头,这样字母排序它就排第一位)

URL 输入:http://maven.aliyun.com/nexus/content/groups/public/

images

其它不用管,默认即可,最后点击创建!

接着点击 maven-public

maven-public

双击 aliyun-repository 移到右侧最后保存!

xxx

nexus 搭建完成!

配置 Maven

setting.xml 文件里的 <servers> 标签内加入以下配置(password 是你设置的密码)

1
2
3
4
5
6
7
8
9
10
11
12
13
<server>
<!--正式版-->
<id>nexus-releases</id>
<username>admin</username>
<password>qwe</password>
</server>

<server>
<!--快照版-->
<id>nexus-snapshots</id>
<username>admin</username>
<password>qwe</password>
</server>

打包发布到私服

在你项目里的 pom.xml 中加入以下配置(其中 id 对应 setting.xml 中的 server id)

1
2
3
4
5
6
7
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Demo Release</name>
<url>http://127.0.0.1:8081/repository/maven-releases</url>
</repository>
</distributionManagement>

然后先点击 clean,按住 CTRL 键再点击 deploy,最后点击上方运行按钮!

images

不幸的是,报 400 错误

1
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project ssm-book: Failed to deploy artifacts: Could not transfer artifact org.example:ssm-book:war:1.0-20210406.103711-1 from/to nexus-releases (http://127.0.0.1:8081/repository/maven-releases): Transfer failed for http://127.0.0.1:8081/repository/maven-releases/org/example/ssm-book/1.0-SNAPSHOT/ssm-book-1.0-20210406.103711-1.war 400 Repository version policy: RELEASE does not allow version: 1.0-20210406.103711-1

对于 400 错误,网上的解决办法有如下

选择 Security 下的 Anonymous Access,将 Username 改为 admin

images

点击 maven-releases 把 Deployment policy 改为 Allow redeploy,最后保存即可(这个作用就是允许重新部署,比如已存在的 jar 包,是不能再重新部署的)

images

xxx

还有一种是版本问题,就是你不能发布 SNAPSHOT(快照) 版本到 Release 类型的仓库,查看 pom.xml,看看是不是 SNAPSHOT 版本,然后修改它!

最后发布成功!熟悉的 BUILD SUCCESS

BUILD SUCCESS

最后我们可以查看已发布的包

images

我们还可以使用私服中的 jar 包

pom.xml 添加

1
2
3
4
5
6
7
8
9
10
11
12
13
<repositories>
<repository>
<id>nexus</id>
<name>Demo Repository</name>
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

不仅要指定 repositories 的 url,我们还要在 dependencies 标签加入依赖

1
2
3
4
5
<dependency>
<groupId>cn.imzjw</groupId>
<artifactId>ssm-book</artifactId>
<version>1.0</version>
</dependency>

这时候私服中的 jar 包就已经下载到本地了!

local

至此,一个简单的搭建及上传就大功告成了!