企业 Maven 依赖管理层次结构设计 - 附录

Chat 文章地址: 企业 Maven 依赖管理层次结构设计

由于文章涉及内容太多,不想在文章中包含太多基础的内容,但是对于了解不深的人来说,没有这些内容也不容易真正掌握,因此在博客上通过本文附加一些额外的内容来完善上述 Chat。

1. 搭建 Nexus 私服

下载地址

Docker方式

安装文档

为了简单快速演示,本文直接通过 Docker 方式运行。

DockerHub: Sonatype Nexus3 Docker: sonatype/nexus3

直接通过下面的命令启动:

docker run -d -p 8081:8081 --name nexus sonatype/nexus3

等待启动成功后,通过浏览器打开 http://localhost:8081/,此时可以看到下面的界面:
在这里插入图片描述
Browse 界面如下:
在这里插入图片描述
这个界面重要的仓库分别如下:

  • maven-central: 类型是 proxy,代理的意思,这里会转发到 maven 中央仓库去下载。
  • maven-releases: 类型是 hosted,当前仓库直接存放 releses 发布版的构建(jar,pom等)
  • maven-snapshots: 和上面一样是 hosted,存放快照版。
  • maven-public: 类型是 group,一个公开的组,最常用的仓库是 public,这个组包含了上面的 3 个仓库,并且按照 releases, snapshots, central 的顺序配置,优先选择本地的发布版,其次是快照版,最后是去中央仓库去找。下图是该仓库顺序的配置:
    在这里插入图片描述

进入上述 Nexus 网站后,右上角可以登录,默认登录密码在(容器中) /nexus-data/admin.password 中:

# 通过下面命令进入容器
$ docker exec -it nexus /bin/bash
# 查看密码
$ cat /nexus-data/admin.password

得到密码后,使用 admin 账号进行登录,然后设置新的密码,这里为了演示和全文的一致,本文设置密码为 123456

2. 配置 Aliyun 代理仓库

虽然 Maven 中央仓库的速度已经可以接受了,但是配置一个国内的镜像源会让下载速度变得更快,国内目前最稳定的就是 AliRepo
在这里插入图片描述
接下来我们增加一个代理来配置 AliRepo 的 central

登录 Nexus,然后点击下图所示按钮进入管理界面:
在这里插入图片描述
左侧菜单打开 Repositories
在这里插入图片描述
点击【Create Repository】按钮,然后选择 maven2(proxy)Name 输入 AliRepo,然后粘贴前面提到的 url https://maven.aliyun.com/repository/centralRemote storage 中。输入内容如下图所示。
在这里插入图片描述
拖到最下面,点击 【Create repository】按钮即可创建完成。

前面提到过 maven-public 仓库是一个最常用的仓库组,真正使用的时候很少直接指定具体某个仓库,通常使用这个组,因此想要方便的使用刚刚新增的 AliRepo,还需要配置 maven-public 组中的内容和顺序:
在这里插入图片描述
如上图所示,将 AliRepo 从左侧添加到右侧 Members 中,然后调整顺序到 maven-central 上面,这样就会优先从 AliRepo 下载依赖。

3. 个人 Maven 配置

想要使用上面的仓库,以及 deploy 到 Nexus 私服,还需要每个用户(开发人员)在自己电脑上配置 Maven 的 settings.xml,关键的部分配置如下:

<servers>
    <!-- 快照版用户配置 -->
    <server>
        <id>nexus-snapshots</id>
        <username>admin</username>
        <password>123456</password>
    </server>
    <!-- 发布版用户配置 -->
    <server>
        <id>nexus-releases</id>
        <username>admin</username>
        <password>123456</password>
    </server>
</servers>
<!-- 所有 Maven 依赖下载都走私服 -->
<mirrors>
    <mirror>
        <id>central</id>
        <name>central</name>
        <url>http://localhost:8081/repository/maven-public/</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

注意上面配置的用户密码。
这里为了简单直接用的 admin, 企业为了控制权限可以创建不同的账号和密码。

有了上面的配置后,所有依赖都会通过上面的镜像地址进行下载。

4. 什么是 SNAPSHOT 快照版?

注意下面所示的 pom.xml 文件中的 version 标记的值有一个后缀: -SNAPSHOT

<project xmlns="http://maven.apache.org/POM/4.0.0"
  ...
  <groupId>...</groupId>
  <artifactId>my-app</artifactId>
  ...
  <version>1.0-SNAPSHOT</version>
  <name>Maven Quick Start Archetype</name>
  ...

The SNAPSHOT value refers to the ‘latest’ code along a development branch, and provides no guarantee the code is stable or unchanging. Conversely, the code in a ‘release’ version (any version value without the suffix SNAPSHOT) is unchanging.

SNAPSHOT 指的是开发分支上的“最新”代码,不能保证代码是稳定的或不变的。 相反,“发布”版本中的代码(没有SNAPSHOT 后缀)是稳定不变的。

In other words, a SNAPSHOT version is the ‘development’ version before the final ‘release’ version. The SNAPSHOT is “older” than its release.

换句话说,SNAPSHOT 版本是最终发布版本之前的开发版本。 SNAPSHOT 比它的发布版时间“更早”。

During the release process, a version of x.y-SNAPSHOT changes to x.y. The release process also increments the development version to x.(y+1)-SNAPSHOT. For example, version 1.0-SNAPSHOT is released as version 1.0, and the new development version is version 1.1-SNAPSHOT.

在发布过程中,x.y-SNAPSHOT 的一个版本更改为 x.y。 发布过程还将开发版本递增到 x. (y + 1)-SNAPSHOT。 例如,版本1.0-SNAPSHOT 作为版本1.0发布,新的开发版本是1.1-SNAPSHOT版本。

5. Redeploy 重新发布 Release

如果一个 release 版本发布到了 Nexus,默认情况下是不能再次发布的,如果允许发布,就会出现同一个版本的不同的版本。这是因为如果其他人使用了你这个版本,这个版本会下载到其他人本地仓库中,你重新 deploy 后,对方本地仓库的 release 版本不会重新下载,因此对已经下载的人就无效了。

所以如果想要 redeploy,还要通知所有下载过的人删除本地仓库的依赖再重新下载最新版本。一般遇到这个问题都是建议发布一个新的版本。

如果想让仓库可以 redeploy,可以在 maven-release 下面配置:
在这里插入图片描述
配置后,就可以重新执行 maven deploy 了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值