Maven进阶系列-仓库和镜像
Maven进阶系列-仓库和镜像
文章目录
- Maven进阶系列-仓库和镜像
- 1. 仓库
- 1.1 仓库类型
- 1.2 寻找jar的基本优先级顺序:
- 1.3 仓库优先次序验证示例
- 2. settings.xml文件
- 2.1 mirrors
- 2.1.1 没有配置mirror
- 2.1.2 配置了mirror
- 2.1.3 <mirrorOf>
- 2.2 servers
- 2.3 profiles
1. 仓库
1.1 仓库类型
本地仓库、远程中央仓库、公司自己搭建的私有仓库

1.2 寻找jar的基本优先级顺序:
本地仓库 > settings.xml的profile的仓库 > pom.xml的profile的仓库 >pom.xml的仓库 > 中央仓库
maven 寻找得顺序大致可以理解为:
1. 在本地仓库中寻找,如果没有则进入下一步。
2. 在全局应用的私服仓库中寻找,如果没有则进入下一步。
3. 在项目自身的私服仓库中寻找,如果没有则进入下一步。
4. 在中央仓库中寻找,如果没有则终止寻找。补充:
1. 如果在找寻的过程中,如果发现该仓库有镜像设置,则用镜像的地址代替。
2. 如果仓库的 id 设置成 “central”,则该配置会覆盖 maven 默认的中央仓库配置。
设置仓库的方式有两种,一种是在项目最顶级POM.xml中设置,另一种是在settings.xml中设置。
1.3 仓库优先次序验证示例
在pom.xml中设置
<repositories><repository><id>pom-repository-first</id><name>pom-repository-first</name><url>http://192.168.100.100:8181/nexus/content/groups/public</url></repository><repository><id>pom-repository-second</id><name>pom-repository-second</name><url>http://192.168.100.100:8182/nexus/content/repositories/thirdparty/</url></repository></repositories><pluginRepositories><pluginRepository><id>nexus</id><name>Team Nexus Repository</name><url>http://192.168.100.100:8181/nexus/content/groups/public</url></pluginRepository></pluginRepositories><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><profiles><profile><id>pom-profile-first</id><repositories><repository><id>pom-repository-first</id><name>pom-repository-first</name><url>http://192.168.100.100:8084/nexus/content/groups/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><!--配置默认的,配置文件,右侧的maven中,profiles默认选中dev--><activation><activeByDefault>true</activeByDefault></activation></profile></profiles>
settings.xml中设定:
<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>D:\Program Files\apache-maven-3.6.1\repository</localRepository><mirrors><!-- 设置多个mirrors镜像,镜像只会执行第一个位置mirror。--><!-- 配置的多个mirror可以都放着不影响,选取一个镜像下载比较快的放在第一个就行。比如你设置使用自己公司的私有仓库--><!--只有当前一个mirror无法连接的时候,才会去找后一个,类似于备份和容灾。所以当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其他的mirror地址查询--><mirror><!--当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询--><id>aliyun</id><name>阿里云仓库地址</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><!--覆盖了Maven自带的central--><mirrorOf>central</mirrorOf></mirror></mirrors><profiles><!-- 全局JDK1.8配置 --><profile><id>jdk1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile><!-- 阿里云配置: 提高国内的jar包下载速度 --><profile><id>settings-profile-aliyun</id><repositories><repository><id>settings-repository-aliyun</id><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile><profile><id>settings-profile-first</id><repositories><repository><id>settings-repository-first</id><name>settings-repository-first</name><url>http://192.168.100.100:8183/nexus/content/groups/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile><profile><id>settings-profile-second</id><repositories><repository><id>settings-repository-second</id><name>settings-repository-second</name><url>http://192.168.100.100:8084/nexus/content/groups/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile></profiles><!--激活仓库配置,拉取依赖会在这些仓库中逐个去找--><activeProfiles><activeProfile>jdk1.8</activeProfile><activeProfile>settings-profile-aliyun</activeProfile><activeProfile>settings-profile-first</activeProfile><activeProfile>settings-profile-second</activeProfile></activeProfiles></settings>

2. settings.xml文件
settings 主要由mirrors、servers 和profiles 三部分组成。
2.1 mirrors
mirror相当于一个拦截器,它会拦截 maven 对 remote repository 的相关请求,把请求里的 remote repository 地址,重定向到 mirror 里配置的地址。
2.1.1 没有配置mirror

2.1.2 配置了mirror

上述图中B仓库被称为A仓库的镜像。
2.1.3
<mirrorOf></mirrorOf> 标签里面放置的是要被镜像的 Repository ID。为了满足一些复杂的需求,Maven 还支持更高级的镜像配置:
<mirrorOf>*</mirrorOf>:匹配所有远程仓库<mirrorOf>repo1,repo2</mirrorOf>:匹配仓库 repo1 和 repo2,使用逗号分隔多个远程仓库。<mirrorOf>*,!repo1</miiroOf>: 匹配所有远程仓库,repo1 除外,使用感叹号将仓库从匹配中排除。
2.2 servers
在Maven的配置文件(settings.xml)中,标签用于配置 Maven 与远程仓库的认证信息,以便于 Maven 在构建或发布时进行认证。
例如,我们要发布 Maven 项目到 Nexus 私服,可以在 标签中配置私服的地址和认证凭证(用户名、密码等)。这样,当 Maven 在构建或发布时访问私服仓库时,会自动使用这里配置的凭证进行认证。以下是一个 标签的示例配置:
<servers><server><id>nexus-releases</id><username>myusername</username><password>mypassword</password></server>
</servers>
其中, 标签指定了私服的 ID,这个 ID 通常是 Nexus 中仓库的名称,例如 “nexus-releases”。 和 分别是私服的访问用户名和密码,用于 Maven 认证访问私服。
这样配置后,在 Maven 执行构建或发布时,就会自动使用这里配置的凭证去访问私服,确保 Maven 在发布时具有足够的权力和权限进行发布操作。
2.3 profiles
在 Maven 的配置文件(settings.xml 或 pom.xml)中, 标签用于配置不同环境下的不同构建选项。例如,有些项目会在开发环境下使用 H2 数据库,而在生产环境下使用 MySQL 数据库,这时就可以使用 标签定义两个不同环境。
每个 标签可以包含独立的一组配置,例如 、、、 等,这些配置将仅在该 激活时生效。可以使用 标签来定义激活该 的条件,例如指定操作系统、Maven 版本、当前构建环境等等。
以下是一个 标签的示例配置:
<profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><database.driver>org.h2.Driver</database.driver><database.url>jdbc:h2:mem:testdb</database.url></properties></profile><profile><id>prod</id><properties><database.driver>com.mysql.jdbc.Driver</database.driver><database.url>jdbc:mysql://localhost/mydb</database.url></properties></profile>
</profiles>
在上述示例中,定义了两个 ,一个 ID 为“dev”,另一个为“prod”。 中设置了 “dev” 是默认激活的配置。在 中配置了不同环境下的数据库驱动和数据库连接 URL。在 Maven 的命令执行中,可以选择使用不同的 Profile 从而达到构建不同的环境的目的。例如:
# 构建 dev 环境
mvn -Pdev clean package# 构建 prod 环境
mvn -Pprod clean package
通过 标签的使用,可以方便地管理多环境下的不同构建配置,提高了项目的灵活性和可维护性,同时也可以更好地符合软件开发的标准流程。
相关文章:
Maven进阶系列-仓库和镜像
Maven进阶系列-仓库和镜像 文章目录 Maven进阶系列-仓库和镜像1. 仓库1.1 仓库类型1.2 寻找jar的基本优先级顺序:1.3 仓库优先次序验证示例 2. settings.xml文件2.1 mirrors2.1.1 没有配置mirror2.1.2 配置了mirror2.1.3 <mirrorOf> 2.2 servers2.3 profiles …...
mac下载安装jenkins
下载 https://get.jenkins.io/war/ 启动 使用命令行启动 java -jar jenkins.war 浏览器访问 IP:8080 或 localhost:8080 ,对jenkins进行配置,刚开始需要输入密码 终端会展示密码和密码存放位置 jenkins插件下载地址, 下载后自行上传。 I…...
Mac上的iTerm2和Oh My Zsh 的安装(安装过程和失败详解)
前言(无重点,安装往后看) 由于在很多人的安利下,说很好用,作者今天花费了4个小时用血的教训总结出来的安装教程,我在安装过程中遇到的最大的问题就是 1. curl: (7) Failed to connect to raw.githubusercon…...
阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令
给客户部署的服务,进入运维阶段,但是经常被客户监测到服务器漏洞,现在整理一下,服务器漏洞问题更新命令步骤。 服务器系统: 阿里云linux服务器:Alibaba Cloud Linux 3 漏洞类型和描述: #3214…...
你写的Python代码到底多快?这些测试工具了解了解
当我们写完一个脚本或一个函数,首先能保证得到正确结果,其次尽可能的快(虽然会说Py慢,但有的项目就是得要基于Py开发) 本期将总结几种获取程序运行时间的方法,极大的帮助对比不同算法/写法效率 插播&…...
网际控制报文协议ICMP
网际控制报文协议ICMP 为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用ICMP(Internet Control Message Protocol)协议,其允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文装在IP数据报中…...
海外腾讯云服务器配置域名的详细说明!!
本文首要针对腾讯云服务器装备域名的问题进行具体的说明,包含域名的品种、注册方法、解析进程以及安全性等方面的介绍,帮助用户更好的理解腾讯云服务器装备域名的全进程。 一、域名的品种 1.域名是互联网上仅有标识一台计算机或一个网络资源的名称&#…...
听GPT 讲Rust源代码--library/std(12)
题图来自 Decoding Rust: Everything You Need to Know About the Programming Language[1] File: rust/library/std/src/os/watchos/mod.rs 该文件(rust/library/std/src/os/watchos/mod.rs)的作用是为Rust标准库提供支持WatchOS操作系统的特定功能。 W…...
06、Caused by: java.nio.charset.MalformedInputException: Input length = 1
目录 问题:原因:解决方法: 问题: Caused by: java.nio.charset.MalformedInputException: Input length 1 原因: 应该是中文有哪些文字导致的。 yml 编码格式出错 解决方法: 直接这里把GBK改成 utf-8…...
探索 Java 8 中的 Stream 流:构建流的多种方式
人嘛,要懂得避嫌… 开篇引入 Java 8引入了Stream流作为一项新的特性,它是用来处理集合数据的一种函数式编程方式。Stream流提供了一种更简洁、高效和易于理解的方法来操作集合数据,同时也能够实现并行处理,以提高性能。 以下是St…...
安卓Apk布局修改从入门到精通
安卓Apk布局修改从入门到精通 课程大纲 本次教程的目标是,学会将安卓apk反向工程后,如何找到需要修改的布局、对布局修改、对布局进行美化,如何隐藏布局(按钮等),以及如何在界面上添加按钮并响应点击事件&…...
React Native 样式及其布局
React Native 样式及其布局 参考 https://reactnative.cn/docs/flexbox 一、样式 在 React Native 中,你并不需要学习什么特殊的语法来定义样式。我们仍然是使用 JavaScript 来写样式。所有的核心组件都接受名为style的属性。这些样式名基本上是遵循了 web 上的 …...
基于51单片机的智能指纹考勤系统设计
**单片机设计介绍,1661【毕设课设】基于51单片机的智能指纹考勤系统设计-原理图-PCB-程序-报告 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的智能指纹考勤系统是一种利用51单片机作为主控芯片&#x…...
I/O性能优化——这一篇就足够啦
背景 继上一篇CPU性能优化文章 ,本次向大家分享关于I/O性能优化的分析套路以及常见措施。后续还有关于内存及网络优化的篇章。 基本概念 对于I/O我们先了解几个概念,文件系统,磁盘,文件。 磁盘 磁盘为系统提供了最基本的持久化存…...
【蓝桥杯选拔赛真题44】python小蓝晨跑 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
目录 python小蓝晨跑 一、题目要求 1、编程实现 2、输入输出 二、算法分析...
摩托车商家做展示预约小程序的作用
摩托车与电动车是人们短距离出行的主要工具,而其使用寿命一般是3年左右及以上、一家可能有多个,市场人群庞大且复购属性强,所以其经营商家也非常多。 如今互联网深入,在品牌宣传、客户获取、信息承载、营销等方面需要车辆经营商家…...
数据库实验:SQL的多表数据查询
目录 实验目的实验内容实验要求实验过程实验代码结果示意 书接上文,但是感觉之前的形式不太好用,至少不是很方便观看,所以这篇尝试改变一下写法,希望可以提升一些观感 实验目的 (1) 掌握RDBMS的数据多表查询功能 (2) 掌握SQL语言…...
【使用Python编写游戏辅助工具】第一篇:概述
引言 欢迎阅读本系列文章,本系列将带领读者朋友们使用Python来实现一个简单而有趣的游戏辅助工具。 写这个系列的缘由源自笔者玩了一款游戏。正巧,笔者对Python编程算是有一定的熟悉,且Python语言具备实现各种有趣功能的能力,因…...
Android与IOS渲染流程对比
目录 Android CPU计算图元信息 GPU干预 几何阶段等后处理 Android APP通过WindowManager统一提供所有Surface的缓冲区【不管是SurfaceView还是普通的布局流程都会将数据提交到Surface的BufferQuene中】 Java中的Surface是null,最终都是由Native层的Surface处理。…...
正则表达式以及 pattern 的撰写方式
正则表达式的撰写方法 在Python中,可以使用re模块来进行正则表达式的撰写和匹配。下面是一个基本的正则表达式撰写方法示例: 导入re模块: python import re定义正则表达式模式: python pattern = r正则表达式其中,r表示原始字符串,可以避免转义字符的问题。 使用re模…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
