Maven 项目依赖仓库配置详解:pom.xml 中的 repositories 与 Maven 配置文件的调用顺序
Maven 项目依赖仓库配置详解:pom.xml 中的 repositories 与 Maven 配置文件的调用顺序
Maven(Apache Maven)是一个流行的项目管理工具,广泛用于Java项目的构建、依赖管理以及项目生命周期的管理。在Maven项目中,pom.xml
文件是核心配置文件之一,而其中的 repositories
元素以及Maven的全局配置文件(通常是 settings.xml
)中的仓库配置则是关键的组成部分之一。这两者在项目的依赖项解析过程中发挥着重要作用,本文将深入探讨它们之间的关系和调用顺序。
1. Maven 项目中的 repositories 元素
1.1 repositories 元素的作用
pom.xml
文件中的 repositories
元素用于定义Maven构建系统在构建项目时从哪里获取依赖项。这个元素是项目中声明依赖项的关键部分,它告诉Maven去哪里查找项目所需的库、框架等。
<repositories><repository><id>central</id><url>https://repo.maven.apache.org/maven2</url></repository><!-- 其他存储库的定义 -->
</repositories>
在这个例子中,repositories
包含了一个名为 “central” 的远程存储库,该存储库的URL是Maven中央存储库的地址。项目构建时,Maven将会在这个存储库中查找项目所需的依赖项。
1.2 repositories 元素的优势
将项目依赖的存储库信息直接定义在 pom.xml
中有一些优势:
- 项目可移植性: 将依赖配置信息与项目一起打包,使得项目更具可移植性,能够在不同环境中顺利构建。
- 版本控制: 依赖配置与项目的版本控制相结合,确保团队成员在不同时间构建项目时使用相同的依赖版本。
- 独立性: 项目的构建不依赖于全局配置,降低了对外部环境的依赖。
2. Maven 配置文件中的仓库配置
2.1 settings.xml 中的仓库配置
Maven的全局配置文件 settings.xml
中也可以配置仓库信息。这些配置通常位于 <settings>
元素下的 <mirrors>
、<profiles>
或 <profiles>
的子元素中。
<settings><!-- 其他配置 --><mirrors><mirror><id>central</id><url>https://repo.maven.apache.org/maven2</url><mirrorOf>central</mirrorOf></mirror><!-- 其他镜像配置 --></mirrors><!-- 其他配置 -->
</settings>
这个例子中的 <mirrors>
元素定义了一个名为 “central” 的镜像,指向Maven中央存储库。镜像的作用是加速依赖项的下载,特别是在网络状况不佳的情况下。
2.2 仓库配置的全局性
全局配置文件的仓库配置具有全局性,影响整个Maven环境。如果项目的 pom.xml
中没有明确的 repositories
元素,或者其中的存储库无法满足依赖项的需求,Maven将会按照全局配置文件中的仓库配置进行搜索。
3. 仓库调用顺序
在实际的依赖项解析过程中,Maven按照以下顺序查找依赖项:
- 本地仓库:
- Maven会先查找本地仓库,即本地机器上存储已下载依赖项的目录。
- pom.xml 中的 repositories 元素:
- 本地仓库查不到,Maven会接着查找项目的
pom.xml
文件中的repositories
元素。这是最接近项目的配置,通常建议在项目中明确定义所需的远程存储库。
- 本地仓库查不到,Maven会接着查找项目的
- 全局 Maven 配置文件 settings.xml 中的仓库配置:
- 如果在项目的
pom.xml
文件中找不到所需的依赖项,Maven会继续查找全局Maven配置文件settings.xml
中的仓库配置。这是一个全局性的备选方案。
- 如果在项目的
- 内置默认仓库:
- 如果以上两者都没有提供所需的依赖项,Maven将会使用其内置的默认仓库,例如 Maven Central Repository。这是Maven的最后一道防线。
在这个过程中,一旦找到符合条件的依赖项,Maven就会停止搜索,避免不必要的网络请求。
4. 总结
pom.xml
文件中的 repositories
元素和Maven配置文件中的仓库配置共同构成了Maven项目依赖项解析的机制。了解它们之间的调用顺序有助于更好地理解Maven的行为,并在实际项目中更有效地管理依赖项。在项目中,建议将依赖项的配置尽可能放在 pom.xml
文件中,以确保项目的构建过程是自包含的,可移植性和可维护性更高。同时,全局配置文件中的仓库配置作为备选方案,在某些情况下也可以发挥重要作用,特别是在需要全局统一配置的场景下。
相关文章:
Maven 项目依赖仓库配置详解:pom.xml 中的 repositories 与 Maven 配置文件的调用顺序
Maven 项目依赖仓库配置详解:pom.xml 中的 repositories 与 Maven 配置文件的调用顺序 Maven(Apache Maven)是一个流行的项目管理工具,广泛用于Java项目的构建、依赖管理以及项目生命周期的管理。在Maven项目中,pom.x…...
JS深浅拷贝
区分 B复制了A的值,如果A被修改,B的值也被改变,那就是浅拷贝。 如果B的值没有跟着修改,那就是深拷贝 深浅拷贝的方式 1、遍历赋值 2、Object.create() 3、JSON.parse()和JSON.stringify() 浅拷贝-遍历 let a {name:"…...

uni-app 命令行创建
1. 首先创建项目,命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错,如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法: 创建目录 C:\Users\Administrator\AppData\Roaming\n…...

ImageJ二值图像处理:形态学和分割
文章目录 二值化形态学处理分割 ImageJ系列: 安装与初步💎 灰度图像处理💎 图像滤波 二值化 在Process->Binary下有两个命令用于生成一个二值化图像,分别是 Make BinaryConvert to Mask 但当前图像是RGB或者灰度图时&…...

自动驾驶中的“雷达”
自动驾驶中有好几种雷达,新手可能会混淆,这里统一介绍一下它们。 首先,所有雷达的原理都是发射波,接收回波(可能是声波或电磁波),并通过发射和接收的时间差以及波的速度计算距离。只不过发射的…...

Web 3.0 是什么
第 1 章 明晰Web 3.0 从本章开始,就进入了本书的第一篇章,入门Web3.0,在第一篇章中将会让读者对Web3.0有一个整体的认知,为学习后面的章节打下基础。 在本章中,主要介绍的是Web的发展历史,包涵Web1.0、Web2.0、Web3.0的发展过程,以及资本为什么需要入场Web3.0、Web3.0…...
四种NAT的网络结构
四种NAT的网络结构 引言1 完全圆锥型NAT2 IP限制圆锥型NAT3 Port限制圆锥型NAT4 对称型NAT5 总结 引言 NAT是将内网地址映射转换为外网地址的一种地址转换方式,这节省了有限的IP地址资源。一般来讲,分为对称型NAT和圆锥形NAT,其中圆锥形NAT又…...

Android studio 使用greenDao根据实体类生成dao类
1.遇到的问题 使用android studio根据实体类生成dao其实也很简单,你只要实现 Parcelable Entity public class ConfigDataModel implements Parcelable {Id(autoincrement true)private Long id null; } 2.使用自带的方法生成 使用build-->make Project生成 …...

redis 从0到1完整学习 (九):SkipList 数据结构
文章目录 1. 引言2. redis 源码下载3. skipList 数据结构4. 参考 1. 引言 前情提要: 《redis 从0到1完整学习 (一):安装&初识 redis》 《redis 从0到1完整学习 (二):redis 常用命令》 《re…...

智能优化算法应用:基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金豺算法4.实验参数设定5.算法结果6.参考文献7.MA…...

Isaac Sim 仿真机器人urdf文件导入
本教程展示如何在 Omniverse Isaac Sim 中导入 urdf 一. 使用内置插件导入urdf 安装urdf 插件 方法是转到“window”->“Extensions” 搜索框中输入urdf, 并启用 通过转至Isaac Utils -> Workflows -> URDF Importer菜单来访问 urdf 扩展。 表格中的 1,2,3 对应着…...

Python 实现Excel和CSV之间的相互转换
通过使用Python编程语言,编写脚本来自动化Excel和CSV之间的转换过程,可以批量处理大量文件,定期更新数据,并集成转换过程到自动化工作流程中。本文将介绍如何使用第三方库Spire.XLS for Python 实现: 使用Python将Exc…...

【GitHub精选项目】短信系统测试工具:SMSBoom 操作指南
前言 本文为大家带来的是 OpenEthan 开发的 SMSBoom 项目 —— 一种用于短信服务测试的工具。这个工具能够发送大量短信,通常用于测试短信服务的稳定性和处理能力。在合法和道德的范畴内,SMSBoom 可以作为一种有效的测试工具,帮助开发者和系统…...

【Filament】立方体贴图(6张图)
1 前言 本文通过一个立方体贴图的例子,讲解三维纹理贴图(子网格贴图)的应用,案例中使用 6 张不同的图片给立方体贴图,图片如下。 读者如果对 Filament 不太熟悉,请回顾以下内容。 Filament环境搭建绘制三角…...

SpringBoot 3.2.0 结合Redisson接入Redis
依赖版本 JDK 17 Spring Boot 3.2.0 Redisson 3.25.0 工程源码:Gitee 集成Redis步骤 导入依赖 <properties><redisson.version>3.25.0</redisson.version> </properties> <dependencies><dependency><groupId>org.pr…...

C++ 比C语言增加的新特性 5 之字符串string
1. c 的string类型 1.1 创建和初始化字符串 string.cpp #include "iostream" #include <string>using namespace std;//创建和初始化字符串 int main() {// 初始化空字符串string emptyString;// 使用字符串字面量初始化字符串string greeting "hello, …...
【第2讲】原理介绍和权限开通
系列文章目录 第1讲:Python环境的下载和安装第2讲:免费开通权限第3讲:1行代码,自动发正文第4讲:1行代码,自动发正文+附件第5讲:自动批量发送第6讲:1行代码,自动下载邮件的附件提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录…...
C++ opencv-3.4.1 提取不规则物体的轮廓
在学习opencv的时候,对一张照片,需要标注照片上物体的不规则轮廓。 如图: 使用opencv进行物体的轮廓处理,关键在于对照片的理解,前期的照片处理的越好最后调用api出来的结果就越接近理想值。 提取照片中物体分如下三步ÿ…...

ServletConfig对象.
是什么 ServletConfig是javax.servlet.包下的一个接口,ServletConfig它是Servlet的一个配置对象; ServletConfig是由tomcat容器创建,通过init方法传入给Servlet; ServletConfig对象如何获取? 在GenericServlet里面定义了&#x…...

jQuery实现框里画面的展开、收起和停止
jQuery实现框里画面的展开、收起和停止 主要用到动画效果中的三个操作: (“id”).slideDown(3000); // 后面的数字表示效果的时长 (“id”).stop(); (“id”).slideUp(3000); 效果图 代码如下: <!DOCTYPE html> <html lang"en…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...