MVN7️⃣私服 & Nexus

1、简介

1.1、团队开发分析

团队开发:一个团队中通常有多个项目(模块)。

若项目 A 要使用项目 B 的代码,该如何获得项目 jar 包?

plan 可行性 分析
将项目 B 打包上传到中央仓库,项目 A 的 Maven 从中央仓库获取 不允许上传个人 jar 包
将项目 B 打包,直接拷贝到项目 A 中 👎 效率低,不方便管理
搭建私服,将方案 1 的中央仓库替换为私服 👍 见下文

1.2、私服(❗)

1.2.1、作用

私服,衍生于 Maven 仓库

作用:解决团队内部的资源共享与同步问题。

  • 存储团队私有资源(e.g. 自研产品),第三方资源(购买的非开源产品)。
  • 加速项目构建,提高项目稳定性。
  • 节省网络带宽,降低中央仓库负载。

1.2.2、私服仓库

私服仓库:私服的本质是服务器,包含多种仓库。

  • 类型

    宿主仓库(hosted) 代理仓库(proxy) 仓库组(group)
    场景 中央仓库仅保存公共开源项目,
    不允许上传私有资源
    开发除了私服资源,
    还需要中央仓库的公共资源
    开发需要的资源,
    存储在私服的不同仓库中
    作用 保存自研、非开源资源 代理连接中央仓库,简化下载配置 为仓库编组,简化下载配置
    关联操作 上传(本地 → 私服) 下载(中央 → 私服) 下载(私服 → 本地)
    说明 类型:Release/Snapshot/Mixed 代理仓库可配置阿里云镜像 设计型仓库,本身不保存资源
  • 图示

    image

1.3、仓库管理器

Maven 仓库管理器:即搭建 Maven 私服的软件

  • Apache Archiva
  • JFrog Artifactory
  • Sonatype Nexus(🔥)

2、Nexus(❗)

Nexus 3.X 官方文档

image

  • 内存小。
  • 支持 hosted、proxy、group 仓库。
  • 支持仓库索引及搜索。
  • 支持界面上传(即👉3.1 手动上传)。
  • 基于文件系统,不依赖数据库。
  • 安全控制。
  • ...

2.1、下载安装

2.1.1、下载

下载地址:解压即安装

部分目录结构

  • nexus-xxx服务器目录
    • bin
      • nexus.exe:启动程序。
      • nexus.vmoptions:虚拟参数。
    • etc
      • nexus-default.properties:默认配置(e.g. 端口号 8081)。
  • sonatype-work工作目录
    • nexus3
      • admin.password:私服 admin 账号默认密码,首次登录时生成。

2.1.2、启动并访问

  1. 启动:进入服务器 bin 目录的命令行,执行命令。

    # 可省略.exe
    nexus.exe /run nexus
    
  2. 访问:默认地址 localhost:8081

  3. 登录:Sign in

    • 账号:默认 admin
    • 密码:默认密码位于 admin.password,首次登录需要重置密码。

2.2、界面

2.2.1、内容浏览

📦

  • 搜索:不支持模糊搜索。

  • 浏览:可浏览仓库列表,点击仓库可查看资源

  • 上传:手动上传资源。

    image

2.2.2、仓库管理(❗)

⚙ → Repository → Repositories

  • 可浏览仓库列表,点击仓库可配置仓库

  • 创建仓库

    image-20220907145615178

① 配置代理镜像

maven-central 是默认的代理仓库,即从远程仓库下载并保存资源。

  • 点击 maven-central 进入仓库管理页面,可见默认配置的远程仓库为 Maven 中央仓库

    image

  • 将中央仓库替换为镜像仓库,可提高下载速度(详见 👉 Maven 安装:2.3.2

    https://maven.aliyun.com/repository/public
    

② 创建仓库

点击 Create repository 可以创建新的仓库

  1. Recipe:仓库类型,maven2 (hosted/proxy/group)

  2. 仓库信息

    • Name:名称
    • Version policy:版本策略(Release/Snapshot/Mixed),资源上传时会校验项目版本命名。
  3. Create repository

    image

③ 仓库组成员

仓库组用于为仓库编组,简化下载配置。

进入仓库组(任意 group 类型的仓库)的管理页面,可以管理成员及顺序。

示例:管理 Nexus 默认仓库组的成员(即 maven-public)

image

3、上传资源

可上传的资源:团队自研项目,第三方资源。

3.1、手动

通常用于上传第三方资源,即非团队自研也非公共开源 jar 包(e.g. Oracle 数据库)

入口:📦 → Upload → 选择仓库。

  • File:资源文件

  • Extension:后缀(war/jar/...)

  • GAV

    image

3.2、IDEA(❗)

用于上传团队自研项目

  • 若要测试私服效果,可先注释阿里云镜像配置以避免影响。
  • 本地 Maven 配置与私服 Maven 配置一致,即相同的 setting.xml。

3.2.1、配置

① Maven 设置

settings.xml:私服通用信息,对所有项目通用

  • servers:账号密码(👉 不同账号拥有不同权限,此配置用于访问私服

  • mirrors:镜像(👉 使用私服来镜像所有仓库,此配置用于下载资源

    • mirrorOf:要镜像的仓库(* 代表所有)

    • url:私服仓库组的访问路径。

      <servers>
          <server>
              <id>jaywee-release</id>
              <username>账号</username>
              <password>密码</password>
          </server>
          <server>
              <id>jaywee-snapshot</id>
              <username>账号</username>
              <password>密码</password>
          </server>
      </servers>
      
      <mirrors>
          <mirror>
              <id>maven-public</id>
              <!-- 镜像所有仓库 -->
              <mirrorOf>*</mirrorOf>
              <!-- 私服仓库组 -->
              <url>http://localhost:8081/repository/maven-public/</url>
          </mirror>
      </mirrors>
      

② 项目配置

pom.xml:对于每个项目而言,使用的私服账号和仓库可能不同。

(可在父模块配置 distributionManagement,子模块继承获得)

工作机制:发布资源时,Maven 查找 setting.xml 中 id 对应的账号密码,根据 url 访问私服仓库。

  • id:即 server 标签的 id(setting.xml)

  • url:私服仓库地址(hosted)

    <distributionManagement>
        <!-- 发行版 -->
        <repository>
            <id>jaywee-release</id>
            <url>http://localhost:8081/repository/jaywee-release/</url>
        </repository>
        <!-- 快照版 -->
        <snapshotRepository>
            <id>jaywee-snapshot</id>
            <url>http://localhost:8081/repository/jaywee-snapshot/</url>
        </snapshotRepository>
    </distributionManagement>
    

3.2.2、上传资源

项目开发完成后,可使用 deploy 构建命令发布。

  • Maven 面板:Lifecycle - deploy

  • Maven 指令

    mvn deploy
    
posted @ 2022-09-06 12:04  Jaywee  阅读(102)  评论(0编辑  收藏  举报

👇