这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
最初我们来到这个世界,是因为不得不来;最终我们离开这个世界,是因为不得不走。 ———— 余华《活着》
一. 概述
上一篇文章 在 k8s 中安装并使用 nexus(一) 介绍了 nexus 的安装方式,这篇文章主要介绍 nexus 的常用配置,并且实践如何推送本地代码到私服。
二. nexus 的基本配置及使用
1. nexus 配置说明
点击左侧Repositories按钮,可以看到下图所示的仓库内容:
仓库说明:
Name 列
-
maven-central:maven中央库,默认从
https://repo1.maven.org/maven2/
拉取 jar。 -
maven-releases:私库发行版 jar。
-
maven-snapshots:私库快照版(调试版本)jar。
-
maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置
settings.xml
中使用。
Type 列(Nexus默认的仓库类型有以下四种):
-
group(仓库组类型):又叫组仓库,用于方便开发人员自己选择仓库以及设置仓库的顺序;
-
hosted(宿主类型):内部项目的发布仓库(内部开发人员发布 jar 包存放的仓库);
-
proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签,其中
Remote Storage Location
属性的值即被代理的远程仓库的路径); -
virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);
2. 创建自定义私有仓库
自定义发行版(release)私库
点击 Create repository
创建自定义发行版(release)私库,选择 maven2 (hosted)
,如下图所示:
自定义仓库配置如下:
主要配置如下几项内容:
Name:自定义名称,必须唯一,通常发行版仓库以 xxx-release
结尾,快照版仓库以 xxx-snapshots
结尾
Version policy:
- Release 一般是发行版的 jar
- Snapshot 一般是快照版的 jar
- Mixed 混合的
Deployment policy:Allow redeploy
其他的配置保持默认即可。
自定义快照版(snapshot)私库
创建快照版(snapshot)私库和上面的一样,只需要将 Name 修改为 xxx-snapshots
,Version policy
修改为 Snapshot
,如下图所示:
自定义代理(proxy)仓库
默认从 https://repo1.maven.org/maven2/
拉取 jar,由于网络的原因经常导致无法下载相关的资源,所以这里介绍配置阿里云的 maven 仓库代理。
阿里云 maven 仓库代理配置:maven.aliyun.com/mvn/guide
创建代理仓库:
配置内容如下图:
配置说明:
Name:仓库的名称必须唯一,这里配置为 aliyun-proxy
Version policy :Release
Remote storage:远程仓库地址,这里配置阿里云 maven 仓库地址:https://maven.aliyun.com/repository/public
自定义 group 仓库的顺序
可以使用默认的 maven-public
,也可以自定义一个 maven2 (group)
类型的仓库进行设置,这里选择自定义一个maven2 (group)
类型的仓库,方便学习理解。
配置如下图:
3. 创建 nexus 用户
三. maven 配置 nexus 说明
点击前面定义的 maven2 (group)
查看其 URL 地址,如下图所示:
1. 在 settings.xml 文件中配置(全局有效)
打开 maven 的配置文件( windows 机器一般在 maven 安装目录的 conf/settings.xml ),在<mirrors></mirrors>
标签中添加 mirror 子节点,复制上面的地址,在 settings.xml
文件中添加如下内容:
<servers>
<!-- 这里配置 nexus 的认证信息,注意这里的 id 需要和 mirros 中的 id 相同才能够匹配认证 -->
<server>
<id>my-maven</id>
<username>test</username>
<password>maven123456</password>
</server>
</servers>
<mirrors>
<mirror>
<id>my-maven</id>
<!--mirrorof配置为 * 时,所有的请求都走这个mirror的url,
mirrorof配置是某个repositoryid时,若构建找不到,则会到maven默认中央仓库去获取的。-->
<mirrorOf>*</mirrorOf>
<name>自定义私有仓库</name>
<url>http://localhost:8081/repository/my-group/</url>
</mirror>
</mirrors>
配置完成之后,可以在 idea 中指定这个 settings.xml
文件,如下图所示:
当指定配置文件之后,可以看到 idea 从 nexus 私有仓库中下载 jar 包:
去到 nexus 仓库中查看仓库内容,如下图所示:
2. 在 pom.xml 文件中配置私有仓库地址(项目有效)
在 pom.xml
中 repositories
标签的作用是用来配置 maven
项目的远程仓库,示例如下:
<repositories>
<repository>
<!--定义仓库 id ,必须唯一,需要 server 中的id对应,以便认证-->
<id>my-maven</id>
<!--仓库描述-->
<name>自定义私有仓库</name>
<!--仓库地址-->
<url>http://localhost:8081/repository/my-group/</url>
<!--是否可以从这个仓库下载releases版本的构件,默认为 true-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否可以从这个仓库下载snapshots版本的构件,默认为 true
禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定
-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
建议在 settings.xml 文件中配置私有仓库地址,这样所有项目都可以使用那个地址。
3. 发布本地 jar 包到 nexus 仓库
查看自定义的 snapshot 仓库,目前没有相关 jar 包资源,下面如何将本地jar包发布到私有仓库。
在 pom.xml 文件中添加如下配置:
<distributionManagement>
<repository>
<!--定义仓库 id ,必须唯一,需要 server 中的id对应,以便认证-->
<id>my-maven</id>
<!--仓库描述-->
<name>自定义发行版仓库</name>
<!--仓库地址-->
<url>http://localhost:8081/repository/my-release/</url>
</repository>
<snapshotRepository>
<!--定义仓库 id ,必须唯一,需要 server 中的id对应,以便认证-->
<id>my-maven</id>
<!--仓库描述-->
<name>自定义快照版仓库</name>
<!--仓库地址-->
<url>http://localhost:8081/repository/my-snapshots/</url>
</snapshotRepository>
</distributionManagement>
执行如下命令发布项目到 nexus 仓库:
mvn clean deploy
构建成功之后可以查看 nexus 仓库内容如下:
这里有一点值得注意的地方,如何将 jar 包发布到 release 仓库?
其实非常简单,只需要将 <version>1.0.0-SNAPSHOT</version>
中的 1.0.0-SNAPSHOT
改为 1.0.0
即可,当再次执行 mvn clean deploy
则会将 jar 包发布到 release 仓库中了。
还可以直接通过 nexus 控制台上传 jar 包到私有仓库: