当前位置: 首页 > news >正文

实习这么久,你知道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
  • 发送 HTTP(S) 请求获取依赖项:
    • Maven 使用构造出的 URL,向远程仓库发送 HTTP(S) 请求,以获取依赖项的内容。具体而言,Maven 会向远程仓库发送 GET 请求,请求该 URL 对应的资源。
    • 如果远程仓库中存在该依赖项,并且 Maven 有权访问该资源,则远程仓库会返回该依赖项的内容,以响应 Maven 的请求。
  • 将依赖项保存到本地仓库:
    • 一旦 Maven 获取了依赖项的内容,它将把该依赖项保存到本地仓库中。Maven 会将该依赖项的内容保存到本地仓库的对应位置,以备将来使用。
    • 如果 Maven 在本地仓库中已经存在该依赖项,则不会再次从远程仓库中获取该依赖项。相反,Maven 会直接从本地仓库中读取该依赖项的内容,并将其用于项目构建。
  • 综上所述,Maven 使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项的过程,包括构造依赖项的坐标、构造依赖项在远程仓库中的 URL、发送 HTTP(S) 请求获取依赖项,以及将依赖项保存到本地仓库等多个步骤。

相关文章:

实习这么久,你知道Maven是如何从代码仓库中找到需要的依赖吗?

目录 碎碎念 Maven是如何找到代码仓库里需要的依赖的&#xff1f; 如何根据坐标在本地仓库中寻找所需要的依赖&#xff1f; 如何根据坐标在远程仓库中寻找所需要的依赖&#xff1f; Maven 如何使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项&#xff0c;请详细解释其原理…...

低代码/零代码的快速开发框架

目前国内主流的低代码开发平台有&#xff1a;宜搭、简道云、明道云、云程、氚云、伙伴云、道一云、JEPaaS、华炎魔方、搭搭云、JeecgBoot 、RuoYi等。这些平台各有优劣势&#xff0c;定位也不同&#xff0c;用户可以根据自己需求选择。 一、阿里云宜搭 宜搭是阿里巴巴集团在20…...

C# 中常见的设计模式

设计模式是一套被广泛应用于软件设计的最佳实践&#xff0c;它们可以帮助开发者解决特定的问题&#xff0c;提高代码的可重用性、可读性和可维护性。本文将介绍 C# 中常见的几种设计模式&#xff0c;并提供相应的示例代码。 工厂模式 工厂模式是一种创建型设计模式&#xff0c…...

promethues/servicemonitor

目录 1.promethues 能保证源源不断地采集/metrics 信息吗&#xff1f;每次都是最新的吗 2.部署servicemonitor 的作用是什么&#xff1f; 3.pod 部署采集数据直接上报promthues &#xff0c;不通过servicemonitor 可以吗&#xff1f; 4.你说的"此外&#xff0c;如果部署…...

postman使用简介

1、介绍 postman是一款功能强大的网页调试和模拟发送HTTP请求的Chrome插件&#xff0c;支持几乎所有类型的HTTP请求 2、下载及安装 官方文档&#xff1a;https://www.getpostman.com/docs/v6/ chrome插件&#xff1a;chrome浏览器应用商店直接搜索添加即可&#xff08;需墙&…...

@DS注解在事务中实现数据源的切换@DS在事务中失效【已解决】

在Springboot的application.yml中的配置&#xff1a; spring:datasource:url: jdbc:mysql://localhost:3306/test2?serverTimezoneUTC&useUnicodetrue&characterEncodingutf8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootdynamic:primar…...

Java I/O之文件系统

一、全文概览 在学习文件系统之前&#xff0c;需要了解下Java在I/O上的发展史&#xff1a;在Java7之前&#xff0c;打开和读取文件需要编写特别笨拙的代码&#xff0c;涉及到很多的InputStream、OutputStream等组合起来使用&#xff0c;每次在使用时或许都需要查一下文档才能记…...

Mysql元数据获取方法(information_schema绕过方法)

前提&#xff1a;如果waf或其它过滤了information_schema关键字&#xff0c;那我们该如何获取元数据呢&#xff1f;能够代替information_schema的有&#xff1a;sys.schema_auto_increment_columnssys.schema_table_statistics_with_bufferx$schema_table_statistics_with_buff…...

Eclipse快捷键

* 1.补全代码的声明&#xff1a;alt /* 2.快速修复: ctrl 1 * 3.批量导包&#xff1a;ctrl shift o* 4.使用单行注释&#xff1a;ctrl /* 5.使用多行注释&#xff1a; ctrl shift / * 6.取消多行注释&#xff1a;ctrl shift \* 7.复制指定行的代码&#xff1a;ctrl a…...

java ssm自习室选座预约系统开发springmvc

人工管理显然已无法应对时代的变化&#xff0c;而自习室选座预约系统开发能很好地解决这一问题&#xff0c;既能提高人力物力&#xff0c;又能提高预约选座的知名度&#xff0c;取代人工管理是必然趋势。 本自习室选座预约系统开发以SSM作为框架&#xff0c;JSP技术&#xff0c…...

分享我从功能测试转型到测试开发的真实故事

由于这段时间我面试了很多家公司&#xff0c;也经历了之前公司的不愉快。所以我想写一篇文章来分享一下自己的面试体会。希望能对我在之后的工作或者面试中有一些帮助&#xff0c;也希望能帮助到正在找工作的你。 找工作 我们总是草率地进入一个自己不了解的公司工作&#xf…...

TypeScript快速入门———(二)TypeScript常用类型

文章目录概述1 类型注解2 常用基础类型概述3.原始类型4 数组类型5 类型别名6.函数类型7 对象类型8 接口9 元组10 类型推论11 类型断言12 字面量类型13 枚举14 any 类型15 typeof概述 TypeScript 是 JS 的超集&#xff0c;TS 提供了 JS 的所有功能&#xff0c;并且额外的增加了…...

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代码

文章来源&#xff1a;NeurIPS 文章类别&#xff1a;IE(Information Extraction) RadGraph主要基于dygie&#xff0c;主要文件为inference.py。 inference.py&#xff1a; 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. 说明&#xff1a; 前面文章中讲到的 OPenGL 渲染都是在页面加载完成即立刻渲染的&#xff0c;如果向控制图形渲染的时间&#xff0c;可以在QT界面中添加一些元素来进行控制。此时需要用到OPenGL当中的makeCurrent(),update(),doneCurrent()函数。 效果展示&#xff1a; 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类中有两个静态的成员变量&#xff1a; public static final InputStream in&#xff1a;标准输入流&#xff0c;通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源public static final PrintStream out&#xff1a;标准输…...

如何用SCRM销售管理系统管理销售和做销售管理

每一家企业都在找适合自己公司的销售管理方法&#xff0c;实现销售目标和努力提高业绩。 我们常说&#xff0c;做好销售管理有很多路径和方法&#xff0c;但我们不知道从哪里开始&#xff1f;每个阶段我们该怎么办&#xff1f;如何有效管理销售团队&#xff1f;好的企企业微信…...

分享117个HTML婚纱模板,总有一款适合您

分享117个HTML婚纱模板&#xff0c;总有一款适合您 117个HTML婚纱模板下载链接&#xff1a;https://pan.baidu.com/s/1cC3I5cfh91-KmQj4nfSoPA?pwd9hod 提取码&#xff1a;9hod Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 import os import shutil import …...

VIVADO2022 sdk 工程创建流程

正点原子uart历程复现 create block design&#xff08;起名 为System&#xff09; -> open block design -> 号/IP catalog 中搜索zynq 双击打开&#xff0c; 将和pl相关的时钟都干掉 再auto 布线一下 把herarchy中的sources 中的system.bd右键、 无脑下一步导出 如…...

【MyBatis】源码学习 02 - Java 元注解以及 MyBatis @Param 注解分析

文章目录前言参考目录学习笔记1、Java 注解1.1、Java 元注解1.2、Java ElementType 枚举值1.3、自定义注解2、Param 注解分析2.1、Param 注解2.2、测试方法2.3、流程分析&#xff08;重点&#xff1a;ParamNameResolver&#xff09;前言 本文内容对应的是书本第 7 章的内容&am…...

贪心算法-蓝桥杯

一、贪心算法的优缺点优点&#xff1a;1.容易理解:生活常见。2.操作简单:在每一步都选局部最优。3.效率高: 复杂度常常是O(1)的。缺点&#xff1a;1.局部最优不一定是全局最优。二、例子: 最少硬币问题硬币面值1、2、5。支付13元&#xff0c;要求硬币数量最少。贪心法: (1) 5元…...

zookeeper 复习 ---- chapter03

zookeeper 复习 ---- chapter03如何创建 zookeeper 对象 要求&#xff1a; 1&#xff1a;知道这几个构造参数 2&#xff1a;知道每一个参数的含义 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) ZooKeeper(String connectString, int sessionTimeout…...

1.PostgreSQL

文章目录LIMITWITH 和RECURSIVEPostgreSQL 约束PostgreSQL AUTO INCREMENT&#xff08;自动增长&#xff09;PostgreSQL PRIVILEGES&#xff08;权限&#xff09;GRANT语法LIMIT SELECT * FROM COMPANY LIMIT 3 OFFSET 2;WITH 和RECURSIVE WITH RECURSIVE t(a,b) AS (VALUES (…...

buu [UTCTF2020]basic-crypto 1

题目描述&#xff1a; 01010101 01101000 00101101 01101111 01101000 00101100 00100000 01101100 01101111 01101111 01101011 01110011 00100000 01101100 01101001 01101011 01100101 00100000 01110111 01100101 00100000 01101000 01100001 01110110 01100101 00100000 0…...

火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 你有没有关注过 APP 给你推送的消息&#xff1f; 出于提升用户活跃度的考虑&#xff0c;APP 会定期在应用内面向用户进行内通推送&#xff0c;推送形式既包括 APP …...

记录每日LeetCode 2341.数组能形成多少数对 Java实现

题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 。在一步操作中&#xff0c;你可以执行以下步骤&#xff1a; 从 nums 选出 两个 相等的 整数从 nums 中移除这两个整数&#xff0c;形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一个下标…...

Ant Design Chart词云图

什么是词云图&#xff1f;词云图&#xff0c;也叫文字云&#xff0c;是对网络文本中出现频率较高的“关键词”予以视觉上的突出&#xff0c;出现越多&#xff0c;显示的字体越大&#xff0c;越突出&#xff0c;这个关键词也就越重要。让浏览者通过词云图一眼就可以快速感知最突…...

wordpress更改后台/网站百度关键词排名软件

Linux作系统实验四淮海工学院计算机工程学院实验报告书课程名&#xff1a;《网络操作系统》题 目&#xff1a; SHELL程序设计班 级&#xff1a; 网路122学 号&#xff1a;姓 名&#xff1a;一、目的与要求掌握SHELL程序设计方法和技术。二、实验内容与题目用Shell编程&#xff…...

wordpress 乱码/推广软文300字范文

硬件系统设计硬件平台基于ARM920T的处理器AT91RM9200&#xff0c;该处理器不仅有丰富的片上资源和标准接口&#xff0c;而且有低功耗、低成本、高性能、支持多种主要的嵌入式操作系统等特点&#xff0c;其采用5级整数流水线结构&#xff0c;性能高达200此方案的硬件系统结构设计…...

做网站要学的技术/今日十大热点新闻

转载请注明作者和出处&#xff1a;http://blog.csdn.net/c406495762运行平台&#xff1a; WindowsPython版本&#xff1a; Python3.xIDE&#xff1a; Sublime text3 一 简单k-近邻算法 1 k-近邻法简介2 距离度量3 Python3代码实现 31 准备数据集32 k-近邻算法33 整体代码二 k-近…...

网络营销推广的重要性/营销网站seo推广

推荐书籍 等我把《笨办法学Python》学完后&#xff0c;就重返Python3&#xff0c;好好学习一下这本书。...

永久免费企业网站建设/深圳seo招聘

props.load(new FileInputStream("db.properties ")); 是读取当前目录的db.properties 文件 getClass.getResourceAsStream("db.properties "); 是读取当前类所在位置一起的db.properties 文件 getClass.getResourceAsStream("/db.properties ")…...

外贸网站建设推广优化/国内seo公司

背景 首先我是个菜鸡&#xff0c;工资也低的一笔。 刚毕业时候在一家国企上班干 app 开发&#xff0c;干了快两年的时候&#xff0c;跳槽到了一家伪大厂干安全。投了不少简历都没有回音&#xff0c;只有这加伪大厂要我就来了。当时说好了会接触一些底层的东西&#xff0c;然而…...