企业 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 了。

isea533 CSDN认证博客专家 运维开发 系统架构
《MyBatis从入门到精通》作者,MyBatis分页插件PageHelper作者,通用Mapper作者,个人网站:https://mybatis.io
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页