Maven进阶-配置私服(Nexus 的使用)

2023-10-30

引言

私服的配置也是企业开发中经常用到的,主要是为了协助多人或者多台设备的共同开发。

我们知道 Maven 项目可以 install 到本地仓库,但是其他设备无法访问我们本地的仓库,我们需要将做好的模块部署(deploy)到一个服务器上,供其他设备下载使用。

这时可以想到,Maven 的中央仓库做的就是这样的事情,也许我们可以把自己的项目上传到 Maven 中央仓库?

确实可行但并不实用,因为中央仓库并不会随意供人上传文件,需要申请,另外中央仓库里的东西都是公开的,有时我们并不希望这样。

所以私服就体现出了作用,私服可以作为中央管理系统来管理 Maven 依赖,一来它能供我们自由的上传和下载我们自己开发的项目,二来它能帮助我们下载中央仓库中的依赖。私服就成了属于我们自己的中央仓库,可以自由使用。

本文借助 Nexus 工具来实现私服的搭建。

一、Nexus 的下载

官网下载地址:https://help.sonatype.com/repomanager3/product-information/download

官网也许下载不了,需要翻墙

网盘地址(3.31版本):https://pan.baidu.com/s/1oqUR_xmauprG-3V-PWHq-Q
提取码:o8bg

这篇文章里有其他版本的网盘地址:nexus3下载地址

二、Nexus 启动服务器

下载之后解压就好,无需安装

解压之后有两个文件夹, nexus-3.31.1-01 和 sonatype-work,两个都有用,如下图:

在这里插入图片描述

进入 nexus-3.31.1-01\bin 目录下:

在这里插入图片描述

路径栏输入 cmd,回车打开命令行:

在这里插入图片描述

输入命令:nexus.exe /run nexus 回车:

在这里插入图片描述

等待片刻后,出现 Started Sonatype Nexus OSS 就完成了:

在这里插入图片描述

在命令行中按下 ctrl + c 即可正常关闭 Nexus,直接点 × 是强制关闭

三、首次配置 Nexus

服务器启动之后,浏览器访问 localhost:8081 即可打开管理页面:

在这里插入图片描述

点击右上角 Sign In 进行登录:

在这里插入图片描述

用户名为 admin,密码在 sonatype-work\nexus3\admin.password 文件中,用记事本打开文件,将里面的密码复制出来:

在这里插入图片描述
在这里插入图片描述

登录成功之后会进行第一次启动的配置,点击 next:

在这里插入图片描述

重新设置 admin 用户的密码,需要输入两次,我先以 admin 作为密码设置:

在这里插入图片描述

是否允许匿名访问,若开启,任何人无需密码就能访问私服并下载文件,但没有管理权限,自己用怎么选都行,我先选择 Disable 禁止:

在这里插入图片描述

是否发送使用信息给开发者,怎么选都行,我先选 No 不发送:

在这里插入图片描述

完成了!点击 Finish:

在这里插入图片描述

四、新建仓库

点击上方的齿轮进入设置,在点击 repositories 进入仓库设置:

在这里插入图片描述

如上图中可以看到,不同于本地仓库,私服中可以有多个仓库,且每一个仓库都有类别,此处简单说明一下这三种类别:

  • proxy:代理仓库,镜像其他的仓库,如 Maven 中央仓库
  • hosted:宿主仓库,用于存放我们上传的包
  • group:仓库组,联合了多个仓库,下载时指定仓库组即可,无需指定具体的仓库

现在私服里有默认创建的一些仓库可以使用,不过我们来尝试自己创建仓库。

对于项目的版本,通常有开发中的 SNAPSHOT(快照版本),和开发完成的 RELEASE(发布版本),通常为这两种版本的项目分别设置仓库,接下来我们试着创建 my-snapshot 和 my-release 两个仓库

(如果你不想新建仓库,可以把已有的 maven-snapshot 和 maven-release 代替之后的 my-snapshot 和 my-release)

首先创建 my-snapshot 仓库点击 Create repository:

在这里插入图片描述

选择 maven2(hosted) 仓库:

在这里插入图片描述

输入仓库名,并选择 Version policy 为 Snapshot,除此以外什么都不需要改:

在这里插入图片描述

点击页面底部的 Create repository 按钮即可:

在这里插入图片描述

同样的方法,来创建 my-release 仓库,这时需要选择 Version policy 为 Release:

在这里插入图片描述

五、设置仓库组

前面说过,仓库组(group)是将几个仓库联合起来的组,下载包时只需要指定仓库组,就能找到需要的依赖,而不必指定具体的仓库

比如将我们自己创建的仓库和 Maven 中央仓库联合,私服就能自己判断哪些包是我们上传的,而哪些需要去中央仓库下载

我们直接用默认创建好 maven-public 仓库组来设置一下,将刚才创建的 my-snapshot 和 my-release 仓库添加到组内(自己创建仓库组也是可以的,需选择仓库类别为 maven2(group) )

点击仓库组的名称 maven-public:

在这里插入图片描述

在页面底部,选择 my-snapshot 和 my-release 两个仓库(ctrl + 左键 可以多选),点击右箭头,或者直接拖拽到右侧,即可加入此仓库组

在这里插入图片描述

点击 Save 保存即可:

在这里插入图片描述

六、仓库的 URL

Maven 通过 url 定位 仓库或者仓库组,点开一个仓库(组)即可看到它的 url:

在这里插入图片描述

或者点击 仓库列表中 URL 列的 copy 按钮:

在这里插入图片描述

七、Maven 的配置

1、配置 mirror

mirror 是 Maven 下载依赖时访问的镜像,我们将私服中的仓库组 maven-public 作为镜像

打开 maven 的目录下的 conf\setting.xml 文件,找到 mirrors 标签,添加一个 mirror,表示下载依赖时访问的仓库组:

<mirrors>
  <mirror>
    <id>maven-public</id> 	<!-- 仓库组名 -->
    <mirrorOf>*</mirrorOf>	<!-- 镜像范围:全部 -->
    <name>nexus maven</name>	<!-- name 随意写即可,也可以不写 -->
    <url>http://localhost:8081/repository/maven-public/</url>	<!-- 仓库组的 url -->
  </mirror>
</mirrors>

在这里插入图片描述

2、配置 server

server 是 Maven 上传包时访问的服务器中的仓库,配置 server 不需要仓库的 URL,因为我们会在项目的 pom.xml 中配置

打开 maven 的目录下的 conf\setting.xml 文件,找到 servers 标签,添加两个 server,分别表示我们自己创建的 my-snapshot 和 my-release 两个仓库:

<servers>
  <server>
    <id>my-snapshot</id>	<!-- 仓库名 -->
    <username>admin</username>	<!-- 私服用户名 -->
    <password>admin</password>	<!-- 私服密码 -->
  </server>
  
  <server>
    <id>my-release</id>
    <username>admin</username>
    <password>admin</password>
  </server>
</servers>

在这里插入图片描述

八、打包上传

上传的项目 pom.xml 文件中需要设置 distributionManagement 标签,如下:

<distributionManagement>
    <repository>	<!-- release 版本上传用的仓库 -->
        <id>my-release</id>	<!-- server 的 id -->
        <url>http://localhost:8081/repository/my-release/</url>	<!-- 仓库的 URL -->
    </repository>
    <snapshotRepository>	<!-- snapshot 版本上传用的仓库 -->
        <id>my-snapshot</id>
        <url>http://localhost:8081/repository/my-snapshot/</url>
    </snapshotRepository>
</distributionManagement>

distributionManagement 有 repository 和 snapshotRepository,分别表示 release 和 snapshot 两个版本上传的两个仓库,上传到哪个仓库取决于项目的 version 版本号后面有没有 SNAPSHOT

在这里插入图片描述

如上图中这个简单的小项目,它的坐标是 com.mzz,版本是 1.0-SNAPSHOT

用命令 mvn deploy 构建项目并上传,看到 BUILD SUCCESS 就成功了

在这里插入图片描述

可以看出这个项目上传到了 my-snapshot 仓库,因为现在项目版本号是 1.0-SNAPSHOT,如果想上传到 my-release 仓库,只需去掉版本号后的 SNAPSHOT 或者将 SNAPSHOT 改成 RELEASE 即可

在模块间的继承关系中,在父模块中设置 distributionManagement 会继承给子模块

九、查看仓库

点击上方的方格按钮,再点击左侧的 Browse,在仓库列表中点击要查看的仓库名称即可

在这里插入图片描述在这里插入图片描述

十、修改中心仓库代理地址

修改中心仓库的代理地址为阿里云,点击 maven-central 仓库:

在这里插入图片描述

修改 Remote storage 为 https://maven.aliyun.com/repository/public,如下图:

在这里插入图片描述

到页面最下方 Save 保存即可

十一、修改端口号

nexus 默认的端口号是 8081,如果想要修改,在 sonatype-work\nexus3\etc 路径下,打开 nexus.properties 文件,修改 application-port 的值,取消注释即可:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven进阶-配置私服(Nexus 的使用) 的相关文章

随机推荐

  • C++—返回值优化

    返回值优化 Return value optimization 缩写为RVO 是C 的一项编译优化技术 即删除保持函数返回值的临时对象 这可能会省略两次复制构造函数 当一个函数返回一个对象实例 一个临时对象将被创建并通过复制构造函数把目标对
  • 这些Android面试题,成就你高薪就业。

    前言 这些题目都是面试必答题 看看你还有哪些是没有掌握到的 1 说下你所知道的设计模式与使用场景 建造者模式 观察者模式 代理模式 门面模式 单例模式 生产者消费者模式 2 Java语言的特点与OOP思想 这个通过对比来描述 比如面向对象和
  • Leetcode 95. 不同的二叉搜索树 II

    文章目录 题目 代码 9 21 首刷看解析 题目 Leetcode 95 不同的二叉搜索树 II 代码 9 21 首刷看解析 class Solution public vector
  • vue实现动态路由--后台返回路由表(并解决页面刷新,路由找不到的问题)

    先大致说一下自己的思路 其实后台返回的权限表跟我们前端自己配置的路由格式是差不多的 格式可以跟后台沟通 我们需要做的是根据后台返回的路由 然后进行遍历 生成一个本地的路由表 然后利用Router addRouters 这个方法 把我们新生成
  • Jmeter-Android手机端脚本录制

    温馨提示 电脑和手机在同一网络段上 1 打开Jmeter工具 新建一个HTTP代理服务器 2 然后再新建一个线程组 3 在线程组中添加录制控制器 4 打开模拟器 设置 WiFi 长按 修改网络
  • 辅助模块加速收敛,精度大幅提升 移动端实时的NanoDet-Plus来了

    Nanodet目标检测模型完成自动捡球机器人 从零开始 带你用Nanodet目标检测模型完成自动捡球机器人 古月居 开源地址 https github com Coolog Nanodet Robot PathPlanning 作者提出 N
  • 技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB

    技术分享 SQL和 NoSQL数据库之间的差异 什么是SQL和NoSQL 一 什么是SQL 二 什么是NoSQL SQL VS NoSQL 针对SQL和NoSQL的区别 将基于不同的方面进行比较 MySQL VS MongoDB 在当今市场
  • forEach()退出循环的方法

    在for循环中退出循环有3种方式 return 终止 break 退出整个循环 continue 退出当次循环 forEach 只能识别上面三种退出循环中的return 其它都识别不了 且return在forEach 中相当于continu
  • ThreadLocal失效

    在JDK中 解决线程冲突问题 有两种解决方案 l 给临界区加锁 l 本地化临界区 第一种解决方案的典型代表是Synchonized 第二种的典型代表是ThreadLocal 而CopyOnWrite是这两种方案的融合 ThreadLocal
  • Arduino通过L298N红板控制板控制直流电机

    在Arduino论坛上看到很多人都做过智能小车 有两轮的 有四轮的 功能也是多种多样 有寻迹 壁障 无线遥控 红外遥控的 其实小车就是个底盘或者载体 然后可以根据需要向小车上加功能模块 于是我在淘宝上买了一个四轮小车的架子 里面包括四个轮子
  • python解包的概念_如何以编程方式为解包结构?

    我试图用Python读取和解析一个二进制文件 在 问题是文件中的数据可以是little endian或big endian格式 也可以是32位或64位的值 在文件头中有几个字节指定数据格式和大小 假设我已经读过这些 并且知道格式和大小 然后
  • SWM32系列教程7-I2C及其应用

    SWM32S单片机有2个I2C外设 其特点如下 支持最高1MHZ速率主机模式 支持最高400KHZ速率从机模式 支持7位或10位地址 波特率可配置 支持中断功能 今天就以驱动电容触摸芯片GT911为例 介绍一下I2C模块的使用 配置I2C之
  • 前端实现打印功能

    目录 方法一 window print 方法二 利用iframe iframe contentWindow print 方法三 使用第三方库或插件 提供一个完整的范例 1 设计打印布局 2 创建打印版本 3 使用JavaScript控制打印
  • C++核心编程 之类和对象(二)

    目录 1 2 对象的初始化和清理 1 2 1 构造函数和析构函数 构造函数语法 析构函数语法 1 2 2 构造函数的分类和调用 1 2 3 拷贝构造函数调用时机 1 2 4 构造函数调用规则 1 2 5 深拷贝与浅拷贝 1 2 6 初始化列
  • 1-Linux_虚拟机VMware 15安装教程

    虚拟机VMware 15安装教程 https www onlinedown net soft 2062 htm 1 由上面的网址下载VMware 15后双击运行安装程序点击下一步 进行安装 2 在最终用户许可协议界面选中 我接受许可协议中的
  • 为什么要用TSubClassOf

    2019独角兽企业重金招聘Python工程师标准 gt gt gt TSubclassOf 是提供 UClass 类型安全性的模板类 例如您在创建一个投射物类 允许设计者指定伤害类型 您可只创建一个 UClass 类型的 UPROPERTY
  • vsocde vue snippet 设置

    vue snippt 设置 建议下在一个 vetur extensions 1 首先打开 vue json 文件 ctrl p 搜索 vue json 文件 enter File gt preferences gt User sneppts
  • MSBuild入门

    MSBuild是什么 MSBuild全称 Microsoft Build Engine 是用于构建应用程序的平台 您可能不知道它 但是如果您在使用VS做开发 那么一定时时刻刻在使用它 因为是它在背后为你管理生成你的项目文件 当新建一个项目时
  • ARM汇编指令集·带例题

    目录 32位ARM汇编指令集 32位数据操作指令 32位存储器数据传送指令 32位转移指令 其它32位指令 指令具体用法 数据处理指令 MOV指令 ADD指令 SUB指令 MUL指令 CMP指令 ORR逻辑或 BIC指令 转移指令 B指令
  • Maven进阶-配置私服(Nexus 的使用)

    Maven进阶 配置私服 Nexus 的使用 引言 一 Nexus 的下载 二 Nexus 启动服务器 三 首次配置 Nexus 四 新建仓库 五 设置仓库组 六 仓库的 URL 七 Maven 的配置 1 配置 mirror 2 配置 s