【Maven】依赖管理,Maven仓库,Maven核心功能

Maven 是一个项目管理工具,基于 POMProject Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件

大白话:Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar

  • 项目开发:编译、打包(jar 包)、运行。

image.png|408

什么是 Maven

Maven 是一个项目管理工具,基于 POMProject Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件

大白话:Maven 是一个项目管理工具,通过 pom. xml 文件的配置获取 jar 包,而不用手动去添加 jar 包

  • Maven 简单,高效,可以提高我们的开发效率,减少我们的开发 bug。
  • Maven 提供的功能非常多,在这主要体现两方面:
    • 项目构建
    • 管理依赖

创建一个 Maven 项目

IDEA 本身已经继承了 Maven,我们可以直接使用,无需安装

以下截图的 IDEA 版本为:2024.1.2,不同版本的 IDEA 界面展示会有不同

image.png|408

  • 点击 create,就创建好了一个 Maven 项目

image.png|267

Maven 核心功能

接下来我们结合项目,介绍 Maven 在项目开发中的作用

  1. 项目构建
  2. 管理依赖

项目构建

Maven 提供了标准的,跨平台(LinuxWindowsMacOS 等)的自动化项目构建方式

当我们开发了一个项目之后,代码需要经过编译、测试、打包、发布等流程。每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得麻烦。而 Maven 给我们提供了一套简单的命令阿里完成项目的构建

image.png|379

  • 比如点击“package”,就可以完成项目的打包操作

image.png

打包就是把所有的 class 文件,全部放在一起,打成 jar 包或者 war

  • jarwar 包是一种压缩文件
  • jar 包就是把开发人员已经写好的一些代码进行打包。打包好的 jar 包就可以进入到其他项目中,也可以直接使用这些 jar 包中的类和属性
  • 另外,也可以打成可执行 jar 包,这样的包就可以通过 java -jar 命令来执行
  • war 包可以理解为是一个 web 项目,里面是项目的所有东西,通常用于网站

依赖管理

上面说到,Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar 包获取的 jar 包,其实就是依赖

pom.xml 就是 Maven 的配置文件,用以描述项目的各种信息

依赖配置

依赖:指当前项目运行时所需要的 jar
比如 JDBC,我们需要手动下载 mysql-connector-java 的包,并且添加到项目中


如果使用 Maven,我们只需要在 pomxml 中引入 mysql-connector-java 的依赖就可以了

<dependencies>  <!--里面放置项目的依赖坐标,可以为多个-->  
</dependencies>
  1. pom 文件 <dependencies> 标签内,添加依赖坐标
<dependencies>  <groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version>  
</dependencies>
  1. 点击刷新按钮,引入新加的依赖 jar 包

    • 后续有添加新的 jar 包,或者修改 jar 包的版本,都需要通过该方式在项目中添加依赖image.png|246
  2. 刷新完之后,就可以在项目中看到新加入的 jar 包

依赖传递

早期我们没有使用 Maven 时,向项目中添加依赖的 jar 包,需要把所有的 jar 包都复制到项目工程下。

比如,A 依赖 B,B 依赖 C,那么 A 项目引入 B 的同时,也需要引入 C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的

  • 比如我们要吃火锅,需要有锅、调料、食材,以及确定什么样的锅,什么样的食材
  • 比如去医院看病,需要带上以往的病例,检查结果、处方等,并且要确定带的资料是正确的。如果日期错了,或者患者错了,带少了,就需要回去重新拿

但如果是使用 Maven 的话,就可以避免管理所需依赖的关系。我们只需要在 pom 文件中,定义直接依赖就可以了。由于 Maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也一起导入

  • 比如吃火锅,现在我们点一个海底捞外卖,直接就把所有食材都送过来了,包括什么锅、什么食材
  • 比如去医院看病,借助“互联网”,实现了信息互享,只需要带上身份证,以往的病历和检查结果就都可以看到了

Maven 会把在引入一个依赖的时候,会一起把实现这个功能所需要的依赖也一起自动引入

这里引入 mysql,进行打包,protobuf 就是连带的依赖,需要一起引入

<dependencies>  <dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.29</version>  </dependency>  
</dependencies>

image.png|458

依赖排除

image.png|422
项目 A ,依赖一个项目 B 和一个 jarA

  • jarA 依赖 jarBjarC
  • 项目 B 里面是各种依赖,其中也用到了 jarC

但是两边都需要引入 jar 包 C,此时我们在哪边进行引入?

一般 jar 包都是向下兼容,高版本可以兼容低版本

最短路径法:
看项目 A 到两个 jarC 放入路径,哪个更短就用哪个

  • 左边的是三步
  • 右边的是两步
    所以就在右边引入 jar

而右边的 jarC 版本比左边的低,无法兼容左边的高版本 jarC。此时就需要将右边的 jarC1.0 升级成 2.0,此时就可以进行指定依赖

  • 首先将 1.0jarC 给排除掉
  • 此时项目中就只剩下 2.0jarC 了,我们在根据路径找 jarC 的时候,就只能找到 2.0jarC

虽然在上面的图片中看起来是有结构的,谁依赖谁。但是放在项目中,都是平铺直叙的,都是放在一起用的

依赖排除

enclusions 就是排除一些依赖,不会默认把相关的所有依赖都进行引入

上面引入依赖的时候,主依赖和相关依赖都是从网上下载的。需要排除一些依赖,就将网上的地址给出来

Maven Help

当项⽬⽐较复杂时,我们就会有 Jar 包冲突的问题,这时候就需要去解决依赖冲突。解决冲突之前,需要先找到冲突,我们可以使⽤ Maven Help 插件来观察包和包之间的依赖关系image.png

  • 如果需要排除某个依赖,就右键点击,选择 Exclude

依赖的坐标

这个代码,我们称之为“坐标”,也就是唯一的

Maven 中,根据 groupIdartfactIdversion 的配置,来唯一识别一个 jar 包,缺一不可。当我们在 pom 文件中配置完依赖之后,点击刷新, Maven 就会根据坐标的位置,去仓库里寻找 jar 包,并把它下载下来,添加到项目中,这个 jar 包下载的地方就叫仓库

仓库:用来存储资源,管理各种 jar

<dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.30</version>  
</dependency>

Maven 仓库

Maven 仓库分为两种:

  1. 本地仓库
    仓库在你本机电脑上,是本地仓库。其他都是远程仓库

  2. 远程仓库

远程仓库

中央仓库

全球唯一,地址为:
https://repo1.maven.org/maven2/springframework/

里面东西太多了,不好找。可以在这里面进行快速查找:
https://mvnrepository.com

  • 私有服务器
  • 其他公共的

Maven 版本选择哪个?

  1. 没漏洞的
  2. 选择次新版本
  3. 选择人多的
    不严格,推荐是基于大家不知道用哪个的情况,对这个 jar 包不熟的情况

jar 包下载路径

  1. 先去本地仓库查找,如果没有,就去中央仓库查
  2. 如果中央仓库没有,就下载失败,报错
  3. 如果中央仓库有,jar 包就从中央仓库下载到本地仓库
  4. 项目从本地仓库中获取

image.png

image.png
本地仓库原来是空的,随着使用,里面的包越来越多(从中央仓库下载过来的)

私有服务器

中央仓库里面的包是全世界的都可以看到,而有一些不想公开的 jar 包就放在私服中(私有服务器)

  • 有账号和密码,公司里面可以用

image.png

  • 有权限的人,一起使用的
  • 如果遇到私服中不存在的 jar 包,第一个人下载之后,后面的人就从私服中可以获取到了,无需再下载了

其他公共服务器

  • 阿里云
  • 华为云

因为中央仓库在国外,所以下载起来会⽐较慢,所以咱们选择借助国内⼀些公开的远程仓库来下载资源

阿里云就相当于是把中央仓库弄了一个镜像,放在了国内,并公开给人用


如果路径中有中文,修改一下 Maven 本地仓库路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMES101(19节,相机)

相机 synthesis合成成像&#xff1a;比如光栅化&#xff0c;光线追踪&#xff0c;相机是capture捕捉成像&#xff0c; 但是在合成渲染时&#xff0c;有时也会模拟捕捉成像方式&#xff08;包括一些技术 动态模糊 / 景深等&#xff09;&#xff0c;这时会有涉及很多专有名词&a…

Linux 安装 yum

第一步&#xff1a;下载安装包 这里以 CentOS 7 为例 wget https://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-3.4.3-132.el7.centos.0.1.noarch.rpm wget https://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm wget…

初识算法 · 双指针(4)

目录 前言&#xff1a; 复写零 题目解析 算法原理 算法编写 四数之和 题目解析 算法原理 算法编写 前言&#xff1a; 本文是双指针算法的最后一文&#xff0c;以复写零和四数之和作为结束&#xff0c;介绍方式同样是题目解析&#xff0c;算法原理&#xff0c;算法编写…

电气自动化入门10:传感器应用介绍

视频链接&#xff1a;4.1 电工知识&#xff1a;传感器应用介绍与接近开关的实际应用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p12&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电工传感器介绍 2.常用电工传感器的种类和用途 3.接近开关

计算机毕业设计 基于Python的无人超市管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

TCP BIC 的拟合函数分析

前面说了这么多&#xff0c;还没有对 bic 的数学性质进行分析&#xff0c;本文补上。 tcp reno 完全依赖 ack 时钟以 rtt 为单位线性增窗&#xff0c;增窗速度与 rtt 负相关&#xff0c;如何在 rtt 比较大时增加增窗速度&#xff0c;这就是 bic&#xff0c;以二分替换遍历。 …

银河麒麟服务器:检查仓库源连接状态

银河麒麟服务器&#xff1a;检查仓库源连接状态 1. 清理YUM缓存2. 生成YUM缓存 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在银河麒麟高级服务器操作系统中&#xff0c;要检查仓库源是否连接成功&#xff0c;可以执行以下两个命令&…

SQL优化 - 排序

文章目录 排序和索引降序索引 FilesortORDER BY 顺序问题ORDER BY LIMIT 排序和索引 如果ORDER BY操作使用了索引&#xff0c;那么就可以避免排序操作&#xff0c;因为索引本身就是按索引 key 排好序的。那什么情况下&#xff0c;ORDER BY会走索引呢&#xff1f; 例如&#…

C#基于SkiaSharp实现印章管理(10)

向PDF文件插入印章图片比之前实现的向图片文件插入印章麻烦得多。   最初的想法是使用PDF浏览控件在线打开PDF文件&#xff0c;然后在控件中实现鼠标移动时动态显示印章&#xff0c;点击鼠标时向当前PDF页面的鼠标点击位置插入图片。由于是.net 8的Winform项目&#xff0c;选…

Elasticsearch学习记录

阅读前须知 本文通过安装elasticsearch-7.17.0为基础&#xff0c;使用 kibana-7.17.0 对 elasticsearch 进行操作&#xff0c;本文中 es 是对 elasticsearch 的简写。 下载地址&#xff1a;elasticsearch_免费高速下载|百度网盘-分享无限制 (baidu.com) 1 初识Elasticsearch …

用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画

总得拆开炼丹炉看看是什么样的。这篇文章将带你从代码层面一步步实现 AI 文本生成图像&#xff08;Text-to-Image&#xff09;中的 LoRA 微调过程&#xff0c;你将&#xff1a; 了解 Trigger Words&#xff08;触发词&#xff09;到底是什么&#xff0c;以及它们如何影响生成结…

redis面试-2024

1、Redis的基本数据结构类型 string、list、set、hash、zet。还有三种特殊类型&#xff1a;Geospatial、Hyperloglog、bitMap。 2、各数据类型对应的场景 3、redis快的原因 *基于内存 内存读写效率远高于磁盘读写&#xff0c;省去磁盘IO操作 *存储形式 Redis作为K-V键值对…

MFC有三个选项:MFC ActiveX控件、MFC应用程序、MFC DLL,如何选择?

深耕AI&#xff1a;互联网行业 算法研发工程师 ​ 目录 MFC ActiveX 控件 控件的类型 标准控件 自定义控件 ActiveX控件 MFC ActiveX控件 标准/自定义控件 MFC ActiveX控件分类 3种MFC如何选择&#xff1f; MFC ActiveX控件 MFC 应用程序 MFC DLL 总结 举例说明…

微信小程序处理交易投诉管理,支持多小程序

大家好&#xff0c;我是小悟 1、问题背景 玩过微信小程序生态的&#xff0c;或许就有这种感受&#xff0c;如果收到投诉单&#xff0c;不会及时通知到手机端&#xff0c;而是每天早上10:00向小程序的管理员及运营者推送通知。通知内容为截至前一天24时该小程序账号内待处理的交…

k8s基础环境部署

什么是k8s K8s&#xff0c;全称Kubernetes&#xff0c;是一个开源的容器编排平台&#xff0c;由谷歌&#xff08;Google&#xff09;开发并开源。Kubernetes这个名字源于希腊语&#xff0c;意为“舵手”或“飞行员”&#xff0c;而“k8s”这个缩写则是因为“k”和“s”之间有八…

【目标检测】yolo的三种数据集格式

目标检测中数据集格式之间的相互转换--coco、voc、yolohttps://zhuanlan.zhihu.com/p/461488682?utm_mediumsocial&utm_psn1825483604463071232&utm_sourcewechat_session【目标检测】yolo的三种数据集格式https://zhuanlan.zhihu.com/p/525950939?utm_mediumsocial&…

【移植】一种快速移植OpenHarmony Linux内核的方法

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开…

基于Spring Boot+Vue的减肥健康管理系统设计和实现【原创】(BMI算法,协同过滤算法、图形化分析)

&#x1f388;系统亮点&#xff1a;图形化分析、BMI算法&#xff0c;协同过滤算法&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a…

计算机网络-系分(5)

目录 计算机网络 DNS解析 DHCP动态主机配置协议 网络规划与设计 层次化网络设计 网络冗余设计 综合布线系统 1. 双栈技术 2. 隧道技术 3. 协议转换技术 其他网络技术 DAS&#xff08;Direct Attached Storage&#xff0c;直连存储&#xff09; NAS&#xff08;Net…

【Immich部署与访问】自托管媒体文件备份服务 Immich 本地化部署与远程访问存储数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件&#xff0c;并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…