实习这么久,你知道Maven是如何从代码仓库中找到需要的依赖吗?
目录
碎碎念
Maven是如何找到代码仓库里需要的依赖的?
如何根据坐标在本地仓库中寻找所需要的依赖?
如何根据坐标在远程仓库中寻找所需要的依赖?
Maven 如何使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项,请详细解释其原理
碎碎念
昨晚跟mentor沟通,mentor问了我一个很基础,但是我确实没有往这方面思考🤔,隐约知道有个本地仓库和远程仓库,但是问原理我就不知道了;
所以有了这篇文章,用来学习;接下来请看,四连问!
Maven是如何找到代码仓库里需要的依赖的?
- 在 Maven 中,要查找并获取项目所需的依赖项,需要配置 Maven 仓库和仓库中的依赖项信息。
- Maven 仓库是一个包含 Maven 构件和其它依赖项的集合,可以从其中获取所需的依赖项。Maven 仓库分为本地仓库和远程仓库。
- 本地仓库:
- 是 Maven 在本地计算机上的一个文件夹,用于存储本地构建和下载的依赖项。在 Maven 的 settings.xml 文件中配置本地仓库的位置。
- 远程仓库:
- 是存储在远程服务器上的 Maven 仓库,用于获取项目所需的依赖项。在 Maven 的 settings.xml 文件中配置远程仓库的位置和访问凭据(如果需要验证)。
- 在 Maven 项目中,需要在 POM 文件中指定所需的依赖项。Maven 根据这些依赖项的坐标(groupId、artifactId、version 和 packaging)在本地仓库和远程仓库中查找依赖项。
- Maven 首先在本地仓库中查找依赖项,如果没有找到,则从远程仓库中下载依赖项,并将其缓存到本地仓库中以便以后使用。
- 如果 Maven 无法连接到远程仓库,或者在远程仓库中无法找到所需的依赖项,则 Maven 构建过程将失败。因此,确保正确配置 Maven 仓库非常重要,以确保项目能够成功构建并运行。
如何根据坐标在本地仓库中寻找所需要的依赖?
- 在本地仓库中查找依赖项,可以按照以下步骤进行:
- 找到本地仓库的位置:
- Maven 默认将本地仓库存储在用户主目录下的 .m2 文件夹中。在这个文件夹下,有一个名为 repository 的子文件夹,用于存储所有已经下载的依赖项。
- 例如,如果 Maven 默认的本地仓库路径为 C:\Users\UserName\.m2\repository,则所有已下载的依赖项都存储在 C:\Users\UserName\.m2\repository 目录下。
- 根据坐标找到依赖项的路径:
- 在本地仓库中,每个依赖项都被存储在一个以其坐标命名的文件夹中。具体而言,依赖项的路径包括以下几个部分:
- groupId:依赖项的 Group ID
- artifactId:依赖项的 Artifact ID
- version:依赖项的版本号
- packaging:依赖项的打包方式
- 例如,对于 JUnit 4.12,其在本地仓库中的路径为:
- C:\Users\UserName\.m2\repository\junit\junit\4.12\junit-4.12.jar
- 其中,junit 是 Group ID,junit 是 Artifact ID,4.12 是版本号,.jar 是打包方式。
- 在本地仓库中查找依赖项:
- 根据依赖项的坐标,在本地仓库中查找该依赖项。具体而言,可以在本地仓库的路径下,查找与该依赖项坐标对应的文件夹或文件。
- 如果在本地仓库中找到了该依赖项,那么 Maven 就可以直接使用该依赖项,而无需再次下载。
- 如果在本地仓库中没有找到该依赖项,那么 Maven 就会尝试从远程仓库中下载该依赖项,并将其保存到本地仓库中,以备将来使用。
- 综上所述:
- 根据坐标在本地仓库中寻找所需要的依赖,需要知道本地仓库的位置以及依赖项的路径构造方式,并在本地仓库中查找与该依赖项坐标对应的文件夹或文件。
如何根据坐标在远程仓库中寻找所需要的依赖?
- 在 Maven 中,根据坐标在远程仓库中寻找所需要的依赖项的过程涉及到一系列协议和约定,其中最常用的协议是 HTTP 或 HTTPS。
- 在 Maven 中,远程仓库可以使用多种协议进行访问,例如 HTTP、HTTPS、FTP 等。默认情况下,Maven 使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项。通过配置 Maven 的 settings.xml 文件,可以指定所需的远程仓库的位置和其他信息,例如 URL、用户名和密码等。
- 在使用 Maven 时,当指定了一个依赖项的坐标时,Maven 会根据这个坐标的信息来构造一个特定的 URL,然后使用 HTTP 或 HTTPS 协议请求这个 URL,以在远程仓库中查找所需的依赖项。如果依赖项存在于远程仓库中,Maven 将下载这个依赖项并保存到本地仓库中。
- 需要注意的是,Maven 在查找依赖项时会按照特定的顺序搜索本地仓库和远程仓库。具体而言,它首先搜索本地仓库,然后按照 settings.xml 文件中指定的顺序搜索远程仓库,直到找到所需的依赖项为止。如果 Maven 找不到所需的依赖项,则构建过程将失败。
- 关于如何配置 Maven 的 settings.xml 文件来指定远程仓库的位置和其他信息,可以参考 Maven 官方文档中的说明。
Maven 如何使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项,请详细解释其原理
- Maven 使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项的过程,涉及到以下几个步骤:
- 构造依赖项的坐标:
- 在 Maven 项目的 POM 文件中,需要指定所需的依赖项,包括其 groupId、artifactId、version 和 packaging 等信息。Maven 根据这些信息构造出一个唯一的坐标,用于标识该依赖项。
- 例如,以下是一个用于指定 JUnit 依赖项的 POM 片段:
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
- 其中,JUnit 的坐标为:junit:junit:4.12
- 构造依赖项在远程仓库中的 URL:
- Maven 使用依赖项的坐标,构造出依赖项在远程仓库中的 URL。具体而言,Maven 根据坐标信息,构造出如下格式的 URL:
- http(s)://<repo-url>/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
- 例如,对于 JUnit 4.12,Maven 构造出的 URL 为:
- https://repo.maven.apache.org/maven2/junit/junit/4.12/junit-4.12.jar
- Maven 使用依赖项的坐标,构造出依赖项在远程仓库中的 URL。具体而言,Maven 根据坐标信息,构造出如下格式的 URL:
- 发送 HTTP(S) 请求获取依赖项:
- Maven 使用构造出的 URL,向远程仓库发送 HTTP(S) 请求,以获取依赖项的内容。具体而言,Maven 会向远程仓库发送 GET 请求,请求该 URL 对应的资源。
- 如果远程仓库中存在该依赖项,并且 Maven 有权访问该资源,则远程仓库会返回该依赖项的内容,以响应 Maven 的请求。
- 将依赖项保存到本地仓库:
- 一旦 Maven 获取了依赖项的内容,它将把该依赖项保存到本地仓库中。Maven 会将该依赖项的内容保存到本地仓库的对应位置,以备将来使用。
- 如果 Maven 在本地仓库中已经存在该依赖项,则不会再次从远程仓库中获取该依赖项。相反,Maven 会直接从本地仓库中读取该依赖项的内容,并将其用于项目构建。
- 综上所述,Maven 使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项的过程,包括构造依赖项的坐标、构造依赖项在远程仓库中的 URL、发送 HTTP(S) 请求获取依赖项,以及将依赖项保存到本地仓库等多个步骤。
相关文章:
实习这么久,你知道Maven是如何从代码仓库中找到需要的依赖吗?
目录 碎碎念 Maven是如何找到代码仓库里需要的依赖的? 如何根据坐标在本地仓库中寻找所需要的依赖? 如何根据坐标在远程仓库中寻找所需要的依赖? Maven 如何使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项,请详细解释其原理…...
低代码/零代码的快速开发框架
目前国内主流的低代码开发平台有:宜搭、简道云、明道云、云程、氚云、伙伴云、道一云、JEPaaS、华炎魔方、搭搭云、JeecgBoot 、RuoYi等。这些平台各有优劣势,定位也不同,用户可以根据自己需求选择。 一、阿里云宜搭 宜搭是阿里巴巴集团在20…...
C# 中常见的设计模式
设计模式是一套被广泛应用于软件设计的最佳实践,它们可以帮助开发者解决特定的问题,提高代码的可重用性、可读性和可维护性。本文将介绍 C# 中常见的几种设计模式,并提供相应的示例代码。 工厂模式 工厂模式是一种创建型设计模式,…...
promethues/servicemonitor
目录 1.promethues 能保证源源不断地采集/metrics 信息吗?每次都是最新的吗 2.部署servicemonitor 的作用是什么? 3.pod 部署采集数据直接上报promthues ,不通过servicemonitor 可以吗? 4.你说的"此外,如果部署…...
postman使用简介
1、介绍 postman是一款功能强大的网页调试和模拟发送HTTP请求的Chrome插件,支持几乎所有类型的HTTP请求 2、下载及安装 官方文档:https://www.getpostman.com/docs/v6/ chrome插件:chrome浏览器应用商店直接搜索添加即可(需墙&…...
@DS注解在事务中实现数据源的切换@DS在事务中失效【已解决】
在Springboot的application.yml中的配置: spring:datasource:url: jdbc:mysql://localhost:3306/test2?serverTimezoneUTC&useUnicodetrue&characterEncodingutf8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootdynamic:primar…...
Java I/O之文件系统
一、全文概览 在学习文件系统之前,需要了解下Java在I/O上的发展史:在Java7之前,打开和读取文件需要编写特别笨拙的代码,涉及到很多的InputStream、OutputStream等组合起来使用,每次在使用时或许都需要查一下文档才能记…...
Mysql元数据获取方法(information_schema绕过方法)
前提:如果waf或其它过滤了information_schema关键字,那我们该如何获取元数据呢?能够代替information_schema的有:sys.schema_auto_increment_columnssys.schema_table_statistics_with_bufferx$schema_table_statistics_with_buff…...
Eclipse快捷键
* 1.补全代码的声明:alt /* 2.快速修复: ctrl 1 * 3.批量导包:ctrl shift o* 4.使用单行注释:ctrl /* 5.使用多行注释: ctrl shift / * 6.取消多行注释:ctrl shift \* 7.复制指定行的代码:ctrl a…...
java ssm自习室选座预约系统开发springmvc
人工管理显然已无法应对时代的变化,而自习室选座预约系统开发能很好地解决这一问题,既能提高人力物力,又能提高预约选座的知名度,取代人工管理是必然趋势。 本自习室选座预约系统开发以SSM作为框架,JSP技术,…...
分享我从功能测试转型到测试开发的真实故事
由于这段时间我面试了很多家公司,也经历了之前公司的不愉快。所以我想写一篇文章来分享一下自己的面试体会。希望能对我在之后的工作或者面试中有一些帮助,也希望能帮助到正在找工作的你。 找工作 我们总是草率地进入一个自己不了解的公司工作…...
TypeScript快速入门———(二)TypeScript常用类型
文章目录概述1 类型注解2 常用基础类型概述3.原始类型4 数组类型5 类型别名6.函数类型7 对象类型8 接口9 元组10 类型推论11 类型断言12 字面量类型13 枚举14 any 类型15 typeof概述 TypeScript 是 JS 的超集,TS 提供了 JS 的所有功能,并且额外的增加了…...
Mac M1 使用Centos8➕VMware Fusion进行静态网络配置
大部分的流程网络上面都有当我们已经下载好mac m1版的Centos8链接: https://pan.baidu.com/s/1UTl4Lo-_c17s-PDj3dA6kA 提取码: 7xh2 和VMware Fusionhttps://www.vmware.com/cn/products/fusion.html之后就可以进行安装了在导入过后 记得将硬盘和内存都设置好了 记得在关机状态…...
RadGraph: Extracting Clinical Entities and Relations from Radiology Reports代码
文章来源:NeurIPS 文章类别:IE(Information Extraction) RadGraph主要基于dygie,主要文件为inference.py。 inference.py: 1、get_file_list(data_path) def get_file_list(path):file_list [item for item in glob.glob(f&q…...
13. OPenGL与QT界面元素交互控制图形渲染
1. 说明: 前面文章中讲到的 OPenGL 渲染都是在页面加载完成即立刻渲染的,如果向控制图形渲染的时间,可以在QT界面中添加一些元素来进行控制。此时需要用到OPenGL当中的makeCurrent(),update(),doneCurrent()函数。 效果展示: ope…...
高通平台开发系列讲解(USB篇)libuvc详解
文章目录 一、什么是UVC二、UVC拓扑结构三、libuvc的预览时序图沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍libuvc。 一、什么是UVC UVC,全称为:USB video(device) class。 UVC是微软与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标…...
ICC2:set_route_opt_target_endpoints
route_opt阶段通过指定endpoint/driver pin list的方式执行incremental优化。 set_route_opt_target_endpoints [-setup_endpoints file] [-setup_endpoints_collection pin_list] [-hold_endpoints file] [-hold_endpoints_collection pin_list] [-ldrc_objects fil…...
5、小程序面试题
1, 小程序页面有哪些生命周期函数onLoad: 页面加载onReady: 页面初次渲染完成onShow: 页面显示onHide: 页面隐藏onUnload: 页面卸载2, 一页小程序页面有哪些文件组成,分别有什么作用.wxml: 使用微信框架设计的一套组件构建页面结构.wxss: 用于设置页面样式, 和css基本一致.js :…...
Java特殊操作流
6 特殊操作流 6.1 标注输入输出流 System类中有两个静态的成员变量: public static final InputStream in:标准输入流,通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源public static final PrintStream out:标准输…...
如何用SCRM销售管理系统管理销售和做销售管理
每一家企业都在找适合自己公司的销售管理方法,实现销售目标和努力提高业绩。 我们常说,做好销售管理有很多路径和方法,但我们不知道从哪里开始?每个阶段我们该怎么办?如何有效管理销售团队?好的企企业微信…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
