手把手教你搭建Maven私服
Java全能学习+面试指南:https://javaxiaobear.cn
1. Maven私服简介
①私服简介
Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。
当然也并不是说私服只能建立在局域网,也有很多公司会直接把私服部署到公网,具体还是得看公司业务的性质是否是保密的等等,因为局域网的话只能在公司用,部署到公网的话员工在家里也可以办公使用。
建立了 Maven 私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载。
请求本地仓库,若本地仓库不存在所需构件,则跳转到第 2 步;
请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转到第 3 步。
请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。
此外,一些无法从外部仓库下载到的构件,也能从本地上传到私服供其他人使用。

②Maven私服的优势
-
节省外网带宽
消除对外部远程仓库的大量重复请求(会消耗很大量的带宽),降低外网带宽压力。 -
下载速度更快
Maven私服位于局域网内,从私服下载构建更快更稳定。 -
便于部署第三方构件
有些构件无法从任何一个远程仓库中获得(如:公司或组织内部的私有构件、Oracle的JDBC驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部Maven项目使用。 -
提高项目的稳定性,增强对项目的控制
如果不建立私服,那么Maven项目的构件就高度依赖外部的远程仓库,若外部网络不稳定,则项目的构建过程也会变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven也能够正常运行。私服软件(如:Nexus)提供了很多控制功能(如:权限管理、RELEASE/SNAPSHOT版本控制等),可以对仓库进行一些更加高级的控制。 -
降低中央仓库得负荷压力
由于私服会缓存中央仓库得构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。
③常见的Maven私服产品
- Apache的Archiva
- JFrog的Artifactory
- Sonatype的Nexus([ˈneksəs])(当前最流行、使用最广泛)
2. Nexus下载安装
下载地址:https://help.sonatype.com/repomanager3/product-information/download
解压,以管理员身份打开CMD,进入bin目录下,执行./nexus /run命令启动
访问 Nexus 首页
首页地址:http://localhost:8081/,8081为默认端口号

3. 初始设置


这里参考提示:
- 用户名:admin
- 密码:查看 E:\Server\nexus-3.61.0-02-win64\sonatype-work\nexus3\admin.password 文件

继续执行初始化:


匿名登录,启用还是禁用?由于启用匿名登录后,后续操作比较简单,这里我们演示禁用匿名登录的操作:

初始化完毕:

4. Nexus上的各种仓库

| 仓库类型 | 说明 |
|---|---|
| proxy | 某个远程仓库的代理 |
| group | 存放:通过 Nexus 获取的第三方 jar 包 |
| hosted | 存放:本团队其他开发人员部署到 Nexus 的 jar 包 |
| 仓库名称 | 说明 |
|---|---|
| maven-central | Nexus 对 Maven 中央仓库的代理 |
| maven-public | Nexus 默认创建,供开发人员下载使用的组仓库 |
| maven-releases | Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 releases 版本 |
| maven-snapshots | Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 snapshots 版本 |
初始状态下,这几个仓库都没有内容:

5. 通过 Nexus 下载 jar 包
修改本地maven的核心配置文件settings.xml,设置新的本地仓库地址
<!-- 配置一个新的 Maven 本地仓库 -->
<localRepository>D:/maven-repository-new</localRepository>
把我们原来配置阿里云仓库地址的 mirror 标签改成下面这样:
<mirror><id>nexus-mine</id><mirrorOf>central</mirrorOf><name>Nexus mine</name><url>http://localhost:8081/repository/maven-public/</url>
</mirror>
这里的 url 标签是这么来的:


把上图中看到的地址复制出来即可。如果我们在前面允许了匿名访问,到这里就够了。但如果我们禁用了匿名访问,那么接下来我们还要继续配置 settings.xml:
<server><id>nexus-mine</id><username>admin</username><password>atguigu</password>
</server>
这里需要格外注意:server 标签内的 id 标签值必须和 mirror 标签中的 id 值一样。
找一个用到框架的 Maven 工程,执行命令:
mvn clean compile
下载过程日志:
Downloading from nexus-mine: http://localhost:8081/repository/maven-public/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0.pom
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0.pom (2.6 kB at 110 kB/s)
Downloading from nexus-mine: http://localhost:8081/repository/maven-public/net/minidev/json-smart/2.3/json-smart-2.3.pom
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/net/minidev/json-smart/2.3/json-smart-2.3.pom (9.0 kB at 376 kB/s)
Downloading from nexus-mine: http://localhost:8081/repository/maven-public/net/minidev/minidev-parent/2.3/minidev-parent-2.3.pom
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/net/minidev/minidev-parent/2.3/minidev-parent-2.3.pom (8.5 kB at 404 kB/s)
Downloading from nexus-mine: http://localhost:8081/repository/maven-public/net/minidev/accessors-smart/1.2/accessors-smart-1.2.pom
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/net/minidev/accessors-smart/1.2/accessors-smart-1.2.pom (12 kB at 463 kB/s)
下载后,Nexus 服务器上就有了 jar 包:

若下载速度太慢,可以设置私服中中央仓库的地址为阿里云仓库地址

修改为:http://maven.aliyun.com/nexus/content/groups/public/

6. 将 jar 包部署到 Nexus
maven工程中配置:
<distributionManagement><snapshotRepository><id>nexus-mine</id><name>Nexus Snapshot</name><url>http://localhost:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>
注意:这里 snapshotRepository 的 id 标签必须和 settings.xml 中指定的 mirror 标签的 id 属性一致。
执行部署命令:
mvn deploy
Uploading to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/atguigu/demo/demo07-redis-data-provider/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/atguigu/demo/demo07-redis-data-provider/1.0-SNAPSHOT/maven-metadata.xml (786 B at 19 kB/s)
Uploading to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/atguigu/demo/demo07-redis-data-provider/maven-metadata.xml
Uploaded to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/atguigu/demo/demo07-redis-data-provider/maven-metadata.xml (300 B at 6.5 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] demo-imperial-court-ms-show 1.0-SNAPSHOT … SUCCESS [ 1.875 s]
[INFO] demo09-base-entity … SUCCESS [ 21.883 s]
[INFO] demo10-base-util … SUCCESS [ 0.324 s]
[INFO] demo08-base-api … SUCCESS [ 1.171 s]
[INFO] demo01-imperial-court-gateway … SUCCESS [ 0.403 s]
[INFO] demo02-user-auth-center … SUCCESS [ 2.932 s]
[INFO] demo03-emp-manager-center … SUCCESS [ 0.312 s]
[INFO] demo04-memorials-manager-center … SUCCESS [ 0.362 s]
[INFO] demo05-working-manager-center … SUCCESS [ 0.371 s]
[INFO] demo06-mysql-data-provider … SUCCESS [ 6.779 s]
[INFO] demo07-redis-data-provider 1.0-SNAPSHOT … SUCCESS [ 0.273 s]

7. 引用别人部署的 jar 包
maven工程中配置:
<repositories><repository><id>nexus-mine</id><name>nexus-mine</name><url>http://localhost:8081/repository/maven-snapshots/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></repository>
</repositories>
相关文章:
手把手教你搭建Maven私服
Java全能学习面试指南:https://javaxiaobear.cn 1. Maven私服简介 ①私服简介 Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。 当然…...
LeetCode 面试题 16.25. LRU 缓存
文章目录 一、题目二、C# 题解 一、题目 设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的…...
LaTeX 数学公式常见问题及解决方案
本文汇总了博主在使用 LaTeX 写文档过程中遇到的所有数学公式常见问题及对应的 LaTeX 解决方案 持续更新... 目录 1. 连等式2. 公式重新开始编号2.1 图片/表格重新编号 1. 连等式 在数学公式推导过程中常常会遇到如 Figure 1 所示的连等式,一般需要保证等号或者不等…...
2023最新软件测试20个基础面试题及答案
什么是软件测试? 答案:软件测试是指在预定的环境中运行程序,为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么? 答案:软件测试的主要目的是保证软件的质量,并尽可能大…...
JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
一、什么是BeanShell? BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,JMeter性能测试工具也充分接纳了BeanShell解释器,封装成了可配置的BeanShell前置和后置处理器,分别是 BeanShell Pre…...
Java声明式事务实战!工作中用这几种就够了!
文章目录 1.几种常用的事务传播行为1.1 REQUIRED1.2 REQUIRES_NEW1.2 NESTED 2. 事务问题2.1 事务不生效?2.2 事务不回滚? 文章会分为两个部分来讲解,第一部分是声明式事务的几种使用场景。第二部分包含事务没有生效,没有回滚的情…...
Abp6.0 使用 appsettings.json配置Serilog.Sinks.MariaDB
Abp6.0中已经启用Serilog,使用Serilog.Sinks.MariaDB包可以保存到MariaDB,mysql中 一种做法是在var loggerConfiguration new LoggerConfiguration( )后使用WriteTo.MariaDB扩展方法来配置,这样在代码中配置不够灵活,修改起来也不方便 其实…...
关于Flume-Kafka-Flume的模式进行数据采集操作
测试是否连接成功: 在主节点flume目录下输入命令: bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf -Dflume.root.loggerinfo,console # 这个file_to_kafka.conf文件就是我们的配置文件 然后在另一台节点输入命令进行消费数据: kafka-cons…...
WeTab--颜值与实力并存的浏览器插件
一.前言 现在的浏览器花花绿绿,有大量的广告与信息,令人目不暇接。有没有一款好用的浏览器插件可以解决这个问题呢?我愿称WeTab为版本答案。 WeTab的界面: 干净又整洁。最最关键的是还有智能AI供你服务。 这个WeTabAI就像chatgp…...
【整理】HTTP相关版本对比
1. HTTP/1 超文本传输协议,处于计算机网络中的应用层,HTTP是建立在TCP协议之上,所以HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性。 缺陷: 连接无法复用 ---------- 每次请求经历三次握手和慢启动HOLB(队头…...
spark性能调优 | 默认并行度
Spark Sql默认并行度 看官网,默认并行度200 https://spark.apache.org/docs/2.4.5/sql-performance-tuning.html#other-configuration-options 优化 在数仓中 task最好是cpu的两倍或者3倍(最好是倍数,不要使基数) 拓展 在本地 task需要自己设置&a…...
Python-pptx教程之二操作已有PPT模板文件
文章目录 简单的案例找到要修改的元素修改幻灯片中的文本代码使用示例 修改幻灯片的图片代码使用示例 删除幻灯片代码使用示例 获取PPT中所有的文本内容获取PPT中所有的图片总结 在上一篇中我们已经学会了如何从零开始生成PPT文件,从零开始生成较为复杂的PPT是非常消…...
生活总是自己的,请尽情打扮,尽情可爱,,
同色系拼接羽绒服了解一下 穿上时尚感一下子就突显出来了 90白鸭绒填充,不仅时尚还保暖 设计感满满的羽绒服不考虑一下吗?...
栈和队列的初始化,插入,删除,销毁。
目录 题外话 顺序表和链表优缺点以及特点 一.栈的特点 二. 栈的操作 2.1初始化 2.2 栈的销毁 2.3 栈的插入 2.3 输出top 2.4 栈的删除 2.5 输出栈 题外话 顺序表和链表优缺点以及特点 特点:顺序表,逻辑地址物理地址。可以任意访问,…...
重温《Unix设计哲学》
重温Unix设计哲学 这个世界是复杂的,但往往本质的东西都是简单的。这些原则,不光是用在程序开发,也适用于架构设计,产品设计等等地方。 简洁原则:以简洁为美 不要为了满足自己的虚荣心,企图搞一些花哨的东…...
AIGC创作系统ChatGPT源码,AI绘画源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图
一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...
Spring条件注解@Conditoinal+ Profile环境切换应用@Profile
Spring条件注解 一、创建一个maven项目 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.5.RELEASE</version></dependency> </dependenc…...
Scrum框架中的Sprint
上图就是sprint里要做的事。Sprint是scrum框架的核心,是所有的想法、主意转换为价值的地方。所有实现产品目标的必要工作都在sprint里完成,这些工作主要包括Sprint 计划(Sprint planning)、每日站会(Daily Scrum&#…...
openfeign、nacos获取接口提供方真实IP
源码分析 client 是 LoadBalancerFeignClient org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient#execute public Response execute(Request request, Request.Options options) throws IOException {try {URI asUri URI.create(request.url());String c…...
模型替换易,工作流锁定难!AI 锁定效应转移,企业决策何去何从?
模型替换易,工作流锁定难模型替换正变得越来越容易,但围绕模型的操作、集成和治理机制却难以更换。近日,普华永道(PwC)宣布为 3 万名员工提供有关 Anthropic 公司 Claude 模型的培训和认证,并围绕该模型为银…...
网络工程师面试必看:通过一个华为ENSP综合实验,拆解中小型网络规划的核心思路
网络工程师面试必看:中小型网络规划的设计思维与实战解析 当面试官抛出"请描述你如何设计一个中小型网络"这个问题时,大多数求职者会陷入两种极端:要么机械罗列配置命令,要么泛泛而谈架构概念。真正能打动面试官的&…...
STM32F103标准库下,DAC的三种触发方式(软件、自动、定时器+DMA)到底该怎么选?
STM32F103标准库下DAC触发方式深度解析:从单次输出到精密波形生成 在嵌入式系统开发中,数字模拟转换器(DAC)是实现数字信号到模拟信号转换的关键模块。STM32F103系列微控制器内置的12位DAC模块提供了三种不同的触发方式࿱…...
别再让容器‘断网’了!Docker DNS配置保姆级教程(从全局到单容器,含8.8.8.8等常用DNS)
Docker容器网络疑难排查:全方位DNS配置指南与实战技巧 当你正在赶一个紧急项目,突然发现Docker容器无法连接外部API服务,控制台不断抛出"Name or service not known"错误——这种场景对开发者来说再熟悉不过了。容器网络问题&#…...
CANN/Ascend C数学函数floorf
floorf 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/can…...
Go语言实现CI/CD流水线:从GitHub Actions到Argo CD的完整指南
Go语言实现CI/CD流水线:从GitHub Actions到Argo CD的完整指南 引言 CI/CD是现代软件开发的核心实践,Go语言项目可以通过各种CI/CD工具实现自动化构建、测试和部署。本文将深入探讨Go语言项目的CI/CD流水线实现,涵盖GitHub Actions、GitLab CI…...
c#软件开发学习笔记--数据类型
c#软件开发学习笔记 一、 数据类型1.基本类型(值类型) 值类型存储在栈中,变量保存的值的本身,赋值是拷贝一份新数据 byte(字节) bit(位) 1byte 8bit byte(1字节) byte b 10; //0 - 255short(2字节) short s 100;…...
Gmail现可语音对话式检索邮件,亮相Google IO 2026
谷歌在向Gmail注入AI功能的道路上仍未停步。本周二,在年度开发者大会Google IO 2026上,这家科技巨头宣布对Gmail的"AI收件箱"功能进行升级扩展,正式引入对话式AI交互能力。这意味着用户今后可以直接向Gmail发问,而无需再…...
别再只用SSH了!深入对比新华三设备Telnet的三种认证模式(None/Password/AAA)及适用场景
新华三设备Telnet认证模式深度解析:从安全权衡到场景适配 在网络设备管理的工具箱里,远程访问协议的选择往往决定了运维效率和安全性之间的平衡点。作为网络管理员,我们常常陷入这样的困境:是选择便捷性还是安全性?是追…...
C# 零基础到精通教程 - 第五章:数组——批量管理同一类型的数据
5.1 为什么需要数组?5.1.1 没有数组的困境csharp// 如果要存储5个学生的成绩,没有数组的话: int score1 85; int score2 92; int score3 78; int score4 90; int score5 88;// 如果要计算平均分: double average (score1 s…...
