一、什么是Maven私服?

Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。

当然也并不是说私服只能建立在局域网,也有很多公司会直接把私服部署到公网,具体还是得看公司业务的性质是否是保密的等等,因为局域网的话只能在公司用,部署到公网的话员工在家里也可以办公使用。

建立了 Maven 私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载。

  1. 请求本地仓库,若本地仓库不存在所需构件,则跳转到第 2 步;
  2. 请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转到第 3 步。
  3. 请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。

此外,一些无法从外部仓库下载到的构件,也能从本地上传到私服供其他人使用。

下图中展示了 Maven 私服的用途。

二、Maven 私服优势

Maven 私服具有以下 5 点优势:

  • 节省外网带宽:大量对于外部远程仓库的重复请求,会消耗很大量的带宽,利用 Maven私服代理外部仓库后,能够消除对外部仓库的大量重复请求,降低外网带宽压力。

  • 下载速度更快:Maven 私服位于局域网内,从私服下载构建更快更稳定。

  • 便于部署第三方构件:有些构件是无法从任何一个远程仓库中获得的(例如,某公司或组织内部的私有构件、Oracle 的 JDBC 驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部 Maven 项目使用。

  • 提高项目的稳定性,增强对项目的控制:如果不建立私服,那么 Maven 项目的构件就高度依赖外部的远程仓库,若外部网络不稳定,则项目的构建过程也会变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven 也能够正常运行。

  • 此外,一些私服软件(如 Nexus)还提供了很多额外控制功能,例如,权限管理、RELEASE/SNAPSHOT 版本控制等,可以对仓库进行一些更加高级的控制。

  • 降低中央仓库得负荷压力:由于私服会缓存中央仓库得构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。

三、Maven 私服搭建


能够帮助我们建立 Maven 私服的软件被称为 Maven 仓库管理器(Repository Manager),主要有以下 3 种:

  • Apache Archiva

  • JFrog Artifactory

  • Sonatype Nexus

其中,Sonatype Nexus 是当前最流行、使用最广泛的 Maven 仓库管理器。本篇文章也是重点讲解Sonatype Nexus。

本篇直接基于nexus3最新版进行讲解!

1.安装maven

1.1 下载maven

# wget下载maven3.8.6
mkdir -pv /usr/local/maven
cd /usr/local/maven
wget https://archive.apache.org/dist/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
# 解压maven
tar -zxvf apache-maven-3.8.6-bin.tar.gz

1.2 设置maven环境变量

# 修改环境变量增加maven
vim /etc/profile

    export MAVEN_HOME=/usr/local/maven/apache-maven-3.8.6
    export PATH=$MAVEN_HOME/bin:$PATH

# 重载生效
source /etc/profile

1.3 验证maven

# 验证maven
mvn -v

2.安装Nexus

2.1 Sonatype Nexus介绍

        Nexus 的全称是 Nexus Repository Manager(Nexus 仓库管理器),是 Sonatype 公司的一个产品。Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。

Nexus 开源版具有以下优点:

  • 占用内存小(28 M 左右)
  • 具有基于 ExtJs 得操作界面,用户体验较好
  • 使用基于 Restlet 的完全 REST API
  • 支持代理仓库、宿主仓库和仓库组
  • 基于文件系统,不需要依赖数据库
  • 支持仓库管理
  • 支持构件搜索
  • 支持在界面上上传构件

2.2 下载安装Nexus

方式一:官网下载最新版本

Nexus 3.x官网免费版下载https://help.sonatype.com/repomanager3/product-information/download

选择linux x86-64版本的,点击下载

方式二:linux系统通过wget下载(本次采用此方式)

wget https://download.sonatype.com/nexus/3/nexus-3.88.0-08-linux-x86_64.tar.gz

环境准备

# 创建 nexus 用户(可选,但推荐)
sudo useradd -M -s /bin/bash -d /home/nexus nexus
sudo passwd nexus

# 或者使用现有用户,确保有 /home/nexus 目录的权限
sudo mkdir -p /home/nexus
sudo chown -R $(whoami):$(whoami) /home/nexus  # 如果使用当前用户
# 或
sudo chown -R nexus:nexus /home/nexus           # 如果使用 nexus 用户

将下载的包上传至服务器,本次上传路径/home/nexus

或wget直接下载

cd /home/nexus
wget https://download.sonatype.com/nexus/3/nexus-3.88.0-08-linux-x86_64.tar.gz

解压 压缩包

# 进入安装包目录
cd /home/nexus

# 解压
tar -zxvf nexus-3.88.0-08-linux-x86_64.tar.gz

解压后会得到两个文件夹:nexus-3.88.0-08nexus 服务目录)、sonatype-work(私有库目录)

进入 nexus-3.21.2-03 文件夹,其中 etc/nexus-default.properties 文件配置端口(默认为 8081)和 work 目录信息,我们可以按需修改。

vim /home/nexus/nexus-3.88.0-08/etc/nexus-default.properties

然后执行如下命令开放 8081 端口:

# 开放8081端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent

重启防火墙

firewall-cmd --reload

进入执行如下命令启动服务

# 进入启动目录
/home/nexus/nexus-3.88.0-08/bin

# 启动nexus
./nexus start

# 关闭 Nexus
./nexus stop

# 在当前终端中显示日志信息,以便通过“run”命令进行测试
./nexus run

Nexus 服务启动以后,我们使用浏览器访问 http://IP:8081/,即可进入登陆页面

http://192.168.206.136:8081/

默认账户为admin

初始密码保存在nexus安装目录下的 sonatype-work 的 admin.password 文件中,当修改完密码后该文件会被删除

cat /home/nexus/sonatype-work/nexus3/admin.password

登录后提示修改密码,本次将密码修改为admin

选择权限配置

四、使用配置Nexus

仓库有3类:

        proxy     代理仓库-  也就是别人的仓库

        hosted   私有仓库 - 也就是自己的仓库

        group     聚合仓库 - 一般引用都是使用这个库

1.配置代理库

1.1 使用admin账户登录,然后点击Configuration > Repositories

1.2 配置ali的maven镜像,提高速度 (代理库)

阿里rep地址 : https://maven.aliyun.com/repository/public

1.3 点击 Create repository

1.4 选择maven2(proxy)

1.5 定义名字、填写URL、最下面点击Create repository

1.6 在group中加入ali镜像

找到maven-public的group仓库,点最右边的>进入修改

在最下面 Group处 , 把ali的镜像加入

1.7 私有仓库(hosted)不用创建 , 使用原有的 maven-releases 和 maven-snapshots即可

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐