《Maven 基础教程》系列,包含以下 4 篇文章:
- Maven 基础教程(一):基础介绍、开发环境配置
- Maven 基础教程(二):Maven 的使用
- Maven 基础教程(三):build、profile
- Maven 基础教程(四):搭建 Maven 私服 Nexus
😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!
Maven 基础教程(四):搭建 Maven 私服 Nexus
- [7.搭建 Maven 私服:Nexus](#7.搭建 Maven 私服:Nexus)
-
- [7.1 Nexus 下载安装](#7.1 Nexus 下载安装)
- [7.2 初始设置](#7.2 初始设置)
- [7.3 Nexus Repository](#7.3 Nexus Repository)
- [7.4 创建 Nexus Repository](#7.4 创建 Nexus Repository)
-
- [7.4.1 创建 Nexus 宿主仓库(hosted)](#7.4.1 创建 Nexus 宿主仓库(hosted))
- [7.4.2 创建 Nexus 代理仓库(proxy)](#7.4.2 创建 Nexus 代理仓库(proxy))
- [7.4.3 创建 Nexus 仓库组(group)](#7.4.3 创建 Nexus 仓库组(group))
- [7.5 通过 Nexus 下载 jar 包](#7.5 通过 Nexus 下载 jar 包)
- [7.6 将 jar 包部署到 Nexus](#7.6 将 jar 包部署到 Nexus)
-
- [7.6.1 上传到 maven-snapshots](#7.6.1 上传到 maven-snapshots)
- [7.6.2 上传到 maven-releases](#7.6.2 上传到 maven-releases)
7.搭建 Maven 私服:Nexus
很多公司都是搭建自己的 Maven 私有仓库,主要用于项目的公共模块的迭代更新等。
7.1 Nexus 下载安装
🚀 下载地址:https://download.sonatype.com/nexus/3/latest-unix.tar.gz
然后将下载的文件上传到 Linux 系统,解压后即可使用,不需要安装。但是需要注意:必须提前安装 JDK。(我这里放在 /root/nexus
下)
bash
tar -zxvf nexus-3.25.1-04-unix.tar.gz
解压后如下:
通过以下命令启动:
bash
# 启动
/root/nexus/nexus-3.25.1-04/bin/nexus start
# 查看状态
/root/nexus/nexus-3.25.1-04/bin/nexus status
如果显示 nexus is stopped.
则说明启动失败,通过命令查看端口占用情况。
bash
netstart -luntp|grep java
可以看到 8081 8081 8081 端口被占用,而 nexus 的默认端口为 8081 8081 8081,我们可以修改其默认端口号,其配置文件在 etc
目录下的 nexus-default.properties
,如下:
打开后修改为自己需要设置的端口,注意开启对外防火墙:
⭐ 提示:
bin
目录下nexus.vmoptions
文件,可调整内存参数,防止占用内存太大。etc
目录下nexus-default.properties
文件可配置默认端口和 Host 及访问根目录。
然后访问 http://[Linux 服务器地址]:8081/
进入首页。
7.2 初始设置
点击右上角的登录:
这里参考提示:
- 用户名:
admin
- 密码:查看
/opt/sonatype-work/nexus3/admin.password
文件
然后输入密码进行下一步:
匿名登录,启用还是禁用?由于启用匿名登录后,后续操作比较简单,这里我们演示禁用匿名登录的操作方式:
除了默认账号 admin
,admin
具有全部权限,还有 anonymous
,anonymous
作为匿名用户,只具有查看权限,但可以查看仓库并下载依赖。
完成:
7.3 Nexus Repository
Nexus 默认创建了几个仓库,如下:
其中仓库类型 Type 为:
proxy
:某个远程仓库的代理。group
:通过 Nexus 获取的第三方jar
包。hosted
:本团队其他开发人员部署到 Nexus 的jar
包。
仓库名称说明:
maven-central
:Nexus 对 Maven 中央仓库的代理。maven-public
:Nexus 默认创建,供开发人员下载使用的组仓库。maven-releasse
:Nexus 默认创建,供开发人员部署自己jar
包的宿主仓库,要求releasse
版本。maven-snapshots
:Nexus 默认创建,供开发人员部署自己jar
包的宿主仓库,要求snapshots
版本。
其中 maven-public
相当于仓库总和,默认把其他 3 个仓库加进来一起对外提供服务了,另外,如果有自己建的仓库,也要加进该仓库才有用。
初始状态下,这几个仓库都没有内容:
7.4 创建 Nexus Repository
除了自带的仓库,有时候我们需要单独创建自己的仓库,按照默认创建的仓库类型来创建我们自己的仓库。
7.4.1 创建 Nexus 宿主仓库(hosted)
点击左边导航栏中的 Repositories,如下图:
然后创建仓库,如下:
同理创建 releases
仓库,然后查看列表:
宿主仓库配置如下:
Repository ID
:仓库 ID。Repository Name
:仓库名称。Repository Type
:仓库的类型,如hosted
、proxy
等等。Provider
:用来确定仓库的格式,一般默认选择 Maven2。Repository Policy
:仓库的策略。Default Local Storage Location
:仓库默认存储目录,例如D:\nexus-2.14.20-02-bundle\sonatype-work\nexus\indexer\bianchengbang_Snapshot_hosted_ctx
。Override Local Storage Location
:自定义仓库存储目录。Deployment Policy
:仓库的部署策略。Allow File Browsing
:用来控制是否允许浏览仓库内容,一般选择true
。Include in Search
:用来控制该仓库是否创建索引并提供搜索功能。Publish URL
:用来控制是否通过 URL 提供服务。Not Found Cache TTL
:缓存某构件不存在信息的时间,默认取值为 1440 1440 1440,表示若某一个构件在仓库中没有找到,在 1440 1440 1440 分钟内再次接收到该构件的请求,则直接返回不存在信息,不会再次查找。
7.4.2 创建 Nexus 代理仓库(proxy)
然后建一个代理仓库,用来下载和缓存中央仓库(或者阿里云仓库)的构件,这里选择 proxy
:
然后创建:
代理仓库配置中,仓库 ID、仓库名称、Provider、Policy 以及 Default Local Storage Location 等配置的含义与宿主仓库相同,不再赘述。需要注意的是,代理仓库的 Repository Type 的取值是 proxy
。
代理仓库配置如下表:
Remote Storage Location
:远程仓库或中央仓库的地址,它是 Nexus 代理仓库最重要得配置,必须输入有效值,通常取值为https://repo1.maven.org/maven2/
。Download Remote Indexes
:是否下载远程仓库的索引。Auto Blocking Enabled
:是否启用自动阻止,即当 Nexus 无法连接中央仓库或远程仓库时,是否一直等待。取值为true
表示不再等待,直接通知客户端无法连接,并返回。File Content Validation
:是否启用文件内容校验。Checksum Policy
:配置校验和出错时的策略,用户可以选择忽略、警告、记录警告信息或拒绝下载等多种策略。Artifact Max Age
:构件缓存的最长时间,对于发布版本仓库来说,默认值为 − 1 -1 −1,表示构件缓存后,就一直保存着,不再重新下载。对于快照版本仓库来说,默认值为 1440 1440 1440 分钟,表示每隔一天重新缓存一次代理的构件。Metadata Max Age
:仓库元数据缓存的最长时间。Item Max Age
:项目缓存的最长时间。
7.4.3 创建 Nexus 仓库组(group)
下面我们将创建一个仓库组,并将刚刚创建的 3 个仓库都聚合起来,这里选择 group
,如下:
查看 Nexus 仓库列表,可以看到创建的仓库组已经创建完成,如下图:
7.5 通过 Nexus 下载 jar 包
由于初始状态下都没有内容,所以我们需要进行配置,我们先在本地的 Maven 的配置文件中新建一个空的本地仓库作为测试。
然后,把我们原来配置阿里云仓库地址的 mirror
标签改成下面这样:
xml
<mirror>
<id>maven-public</id>
<mirrorOf>central</mirrorOf>
<name>Maven public</name>
<url>http://106.15.15.213:8090/repository/maven-public/</url>
</mirror>
这里的 url
标签是这么来的:
把上图中看到的地址复制出来即可。如果我们在前面允许了匿名访问,到这里就够了。但如果我们禁用了匿名访问,那么接下来我们还要继续配置 settings.xml
:
xml
<server>
<id>maven-public</id>
<username>admin</username>
<password>@123456</password>
</server>
注意:server
标签内的 id
标签值必须和 mirror
标签中的 id
值一样。
然后找一个用到框架的 Maven 工程,编译 compile
,下载过程日志:
下载后,Nexus 服务器上就有了 jar
包:
7.6 将 jar 包部署到 Nexus
这一步的作用是将通用的模块打成 jar
包,发布到 Nexus 私服,让其他的项目来引用,以更简洁高效的方式来实现复用和管理。
需要配置 server
:
xml
<server>
<id>maven-public</id>
<username>admin</username>
<password>@123456</password>
</server>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>@123456</password>
</server>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>@123456</password>
</server>
然后在我们需要上传的 Maven 项目中的 pom.xml
添加如下配置:
xml
<!-- 这里的 id 要和上面的 server 的 id 保持一致,name 随意写-->
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>Releases Repository</name>
<url>http://106.15.15.213:8090/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Snapshot Repository</name>
<url>http://106.15.15.213:8090/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
7.6.1 上传到 maven-snapshots
执行命令 mvn deploy
将当前 SNAPSHOT(快照版)上传到私服 maven-snapshots
。
7.6.2 上传到 maven-releases
修改项目的版本,如下:
执行命令 mvn deploy
:
查看:
package
命令完成了项目编译、单元测试、打包功能。install
命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar
包(war
包或其它形式的包)布署到本地 Maven 仓库。deploy
命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar
包(war
包或其它形式的包)布署到本地 Maven 仓库和远程 Maven 私服仓库。