【JavaEE进阶】关于Maven

目录

🌴什么是Maven

🌲为什么要学Maven

🎍创建一个Maven项目

🎄Maven核心功能

🚩项目构建

🚩依赖管理

🎋Maven Help插件

🍀Maven 仓库

🚩本地仓库

🚩中央仓库

🚩私服

🚩Maven设置国内源

🏀配置当前项目setting

🏀设置新项目的setting


🌴什么是Maven

官方对于Maven的描述:

ApacheMavenisasoftwareprojectmanagementandcomprehensiontool. Basedonthe concept of aproject object model (POM), Mavencanmanageaproject'sbuild,reporting and documentation fromacentral piece of information.

翻译过来就是:

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

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

🌲为什么要学Maven

为了简单,⽅便,提⾼我们的开发效率,减少我们的开发Bug.

🎍创建一个Maven项目

IDEA本⾝已经集成了Maven,我们可以直接使⽤,⽆需安装

以 下截图的idea版本为: 2021.3.2,不同版本的idea界⾯展⽰会有所不同

点击Create,就创建好了⼀个Maven项⽬

🎄Maven核心功能

Maven提供的功能⾮常多,Maven在咱们课程中的体现主要是以下两个⽅⾯:

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

🚩项目构建

Maven提供了标准的,跨平台(Linux,Windows,MacOS等)的⾃动化项⽬构建⽅式,当我们开发了⼀个项⽬之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进⾏,就显得特别⿇烦,⽽Maven给我们提供了⼀套简单的命令来完成项⽬的构建.

注意:maven是一个单独的软件,和idea没有任何关系,只不过是idea为了方便吧maven集成过来了。

以下是maven对应的一些命令

比如:打包操作-> 点击package,就可以完成项⽬的打包操作

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

jar包和war包都是⼀种压缩⽂件

jar包就是把开发⼈员已经写好的⼀些代码进⾏打包.打好的jar包就可以引⼊到其他项⽬中,也可以直接使⽤这些jar包中的类和属性.另外也可以打成可执⾏war包,这样的包就可以通过java-war命令来执⾏war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西,通常⽤于⽹站

🚩依赖管理

前⾯说到,Maven是⼀个项⽬管理⼯具,通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包获取的jar包,其实就是依赖.

pom.xml就是maven的配置⽂件,⽤以描述项⽬的各种信息(简单的说Maven是一个项目管理工具,通过pom.xml文件来导入依赖,依赖就是在进行程序开发的时候,需要用到的一些第三方的东西)

例如,在前面讲述的MySQL中,进行JDBC编程的时候,需要手动下载mysql-connector-java的包,并且添加到项目中。

如果使⽤Maven,我们只需要在pom.xml中引⼊mysql-connector-java的依赖就可以了

在pom⽂件 标签内,添加依赖坐标,创建的依赖存放于dependencies目录下

注意:对于pom文件的任意改动,都需要进行刷新操作

此时这个mysql的包就导进来了

依赖传递:

早期我们没有使⽤maven时,向项⽬中添加依赖的jar包,需要把所有的jar包都复制到项⽬⼯程下.⽐如A依赖B,B依赖C,那么A项⽬引⼊B的同时,也需要引⼊C,如果我们⼿动管理这个依赖,这个过程就会⽐较⿇烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的

⽐如我们要吃⽕锅,需要有锅,有调料,有⻝材,以及确认什么样的锅,什么样的⻝材.
⽐如去医院看病,需要带上以往的病历,检查结果,处⽅等,并且要确认带的资料是正确的,如果⽇期错了,或者患者错了,带少了,就需要回去重新拿

但使⽤maven的话,就可以避免管理所需依赖的关系。我们只需要在pom⽂件中,定义直接依赖就可以了,由于maven的依赖具有传递性,所以会⾃动把所依赖的其他jar包也⼀起导⼊

⽐如吃⽕锅,现在我们可以点⼀个海底捞外卖,直接就把所有⻝材都送过来了,包括什么锅,配什么菜.⽐如去医院看病,借助"互联⽹",实现了信息共享,只需要带上⾝份证,以往的病历和检查结果就都可以看到了

如上图,项⽬A通过Maven引⼊Jar A时,会⾃动引⼊Jar B 和Jar C.

Jar A 和项⽬B就是项⽬A的直接依赖.
Jar B, Jar C是间接依赖.

 依赖排除:

上述决定依赖传递非常的好,但是也有不好的地上,在上图中,假设项目B和jar A没有任何关系,不是一个人开发的,那么对于项目B中jar C用到的版本可能是2.0,jar A中的jar C可能用的版本是1.0,那么对于项目A来说,我们所使用的jar C用的版本是1.0还是2.0(有可能两个版本冲突)。

就需要依赖排除,假设使用1.0

就需要把2.0排除掉,就有可能导致项目C报错(通过SpringBoot进行解决,后续讲述)。

如何排除?

在xml文件中,填写exclusions

也可以自动的填入,使用插件

🎋Maven Help插件

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

理解插件:

天⽕+擎天柱=>会⻜的擎天柱.

天⽕在牺牲之前把⾃⼰变成了擎天柱的"⻜⾏插件".在擎天柱需要起⻜的时候就变成翅膀装在擎天柱 ⾝上.不需要起⻜的时候就卸下来放到擎天柱的集装箱⾥.

像IDEA这样的程序虽然功能强⼤,但是也⽆法⾯⾯俱到.对于⼀些特殊场景的功能,开发者就可以开 发⼀些"插件".如果需要这个插件,就单独安装

插件就是对程序的⼀些特定场景,做出⼀些特定的功能的扩展.

简单的理解为借助工具,提升自身的一些功能。

安装插件:File -> Settings ->Plugins -> 搜索Maven Help -> 找到对应插件, 点击Install 安装即可, 安装后需要重启下idea,才能⽣效

安装完之后会多一个Dependency Analyzer文件(依赖的分析)

排除protobuf:右击-> Exclude

此时在Text文件中,就自动的处理了(帮我们处理依赖)

刷新之后,此时protobuf依赖就没有了

注意:当依赖冲突的时候,Maven会采⽤最短路径优先的原则去选择依赖,上述项目A到jar C2.0版本的路径是3,项目A到jar C1.0版本的路径是2,这里肯定是1.0版本的路径最短,默认就选择1.0,如果不想使用1.0,我们自己排除掉即可。

🍀Maven 仓库

我们通过短短⼏⾏代码, 加入了这个依赖,这个依赖就来了,这个依赖从哪里来的??

这个代码,我们称之为"坐标",也就是唯⼀的.

在Maven中,根据groupId、artifactId、version的配置,来唯⼀识别⼀个jar包,缺⼀不可.

当我们在pom⽂件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库⾥寻找Jar包,并把他 下载下来,添加到项⽬中.这个Jar包下载的地⽅就称为仓库.

仓库:⽤于存储资源,管理各种jar包

Maven仓库的本质就是⼀个⽬录(⽂件夹),这个⽬录被⽤来存储开发中所有依赖(jar包,插件等).

Maven仓库分为两⼤类:本地仓库和远程仓库.其中远程仓库⼜分为中央仓库,私服和其他公共库

🚩本地仓库

本地仓库:File -> settings -> 搜索maven

将该地址复制出来,去此电脑中搜索,这就是本地仓库

小结:

本地仓库:⾃⼰计算机上的⼀个⽬录(⽤来存储jar包)

当项⽬中引⼊对应依赖jar包后,⾸先会查找本地仓库中是否有对应的jar包

  • 如果有,则在项⽬直接引⽤
  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库

🚩中央仓库

中央仓库:maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联⽹.由Maven团队维护,全球唯⼀.

仓库地址:https://repo1.maven.org/maven2/

 还可以通过https://mvnrepository.com这个⽹站来查询并下载,刚上传的jar包,不会在这个网站及时更新,会有一定延迟,以上述网站为准

jar版本选择:优先级:看需求 <- 尽量避免有漏洞 <- 随大流(使用情况,尽量不使用最新版本) 

 假如选择了8.3.0,点击去:直接将dependency文件复制到xml文件中即可

上述操作就是把mysql从远程仓库拉到本地仓库,再从本地仓库加载到项目中。

🚩私服

私有服务器,也称为私服

私服:⼀般由公司团队搭建的私有仓库.

私服属于某个公司,或者某个部⻔,往往需要⼀定权限.

有了私服之后,Maven依赖下载的顺序⼜发⽣了变化

当Maven需要下载资源的时候

  1. 先从本地仓库获取,本地仓库存在,则直接返回
  2. 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回
  3. 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了…
  4. 如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库⾥,再为Maven的下载请求提供服务

🚩Maven设置国内源

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

🏀配置当前项目setting

File-> Settings -> 搜索maven

复制该路径,在此电脑中去搜索,若是存放于C盘,可能是找不到这个文件的

此时就分为两种情况

1. 有setting文件,进行修改该文件部分

2.没有setting文件

找到setting文件,根据上述路径进行存放

修改本地仓库地址/镜像服务地址:若不想存放c盘,将m2文件复制到你所放入的目录文件中,也可将setting放入m2文件中,修改idea中的maven地址即可。

🏀设置新项目的setting

上述配置的内容,只对当前项⽬⽣效,为了让后续新建的项⽬也⽣效,需要重新设置⼀下新项⽬的 Settings

当前项⽬和新项⽬共⽤⼀个setttings⽂件即可,所以新项⽬的设置,只需要确认⼀下settings⽂件的路 径即可.

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

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

相关文章

RabbitMQ 路由(Routing)通讯方式详解

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 作为一个广泛使用的消息代理&#xff08;Message Broker&#xff09;&#xff0c;提供了多种消息传递模式&#xff0c;其中路由&#xff08;Ro…

uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点

兼容H5、安卓App、微信小程序 实现逻辑&#xff1a;给默认选中节点的所有子节点添加一个disabled属性&#xff0c;以此禁用子节点。 /components/sonTreeNode/sonTreeNode.vue 封装成组件 <template><view><view :class"[item,item.is_level1?pL1:item…

疾风大模型气象系统:精准到分钟,预见天气未来

精准到分钟,预见天气未来 在现代社会中,气象预报的精准度直接关系到人们的生活质量和生产效率。传统的天气预报虽然能为我们提供趋势性参考,但在短时突发天气变化的应对上仍有一定局限。而疾风大模型气象系统凭借其领先的技术和精细化的预测能力,为气象预报树立了新的标杆…

2024年合肥师范学院信息安全小组内部选拔赛(c211)WP

目录 前言MISC签到题_熟悉吗又来一道签到题文件包含 CRYPTO古典1古典2RSA webbaby_sql 前言 [HFNU 校级选拔] 已经结束&#xff0c;接下来一起了解下题目是怎么做的。 通过网盘分享的文件&#xff1a;ARCHPR_4.66.266.0_汉化绿色版.7z 链接: https://pan.baidu.com/s/1N_c0PJX…

15.初识接口1 C#

这是一个用于实验接口的代码 适合初认识接口的人 【CSDN开头介绍】&#xff08;文心一言AI生成&#xff09; 在C#编程世界中&#xff0c;接口&#xff08;Interface&#xff09;扮演着至关重要的角色&#xff0c;它定义了一组方法&#xff0c;但不提供这些方法的实现。它要求所…

3.使用SD卡挂载petalinux根文件系统

前言 说明为什么使用SD卡挂载petalinux根文件系统如何使用SD卡挂载根文件系统 配置根文件写入类型制作SD分区格式化SD卡将工程目录下的rootfs.tar.gz解压到SD EXT4分区 为什么使用SD卡挂载petalinux根文件系统 Petalinux 默认的根文件系统类型是 INITRAMFS&#xff0c;不能…

【Vulkan入门】16-IndexBuffer

TOC 先叨叨 上篇介绍了如何使用VertexBuffer传入顶点信息。两个多星期了我们一直在玩三个点&#xff0c;本篇介绍如何渲染更多的点。 在渲染前考虑一个问题&#xff0c;渲染一个三角形需要三个点&#xff0c;渲染两个相接的三角形需要几个点&#xff1f; 答案是6个点&#xf…

计算机工作流程

分析下面的计算机工作流程&#xff1a; 1.取数a至ACC&#xff1a;PC程序寄存器自增1&#xff0c;变成0&#xff08;可以理解为PC初始从-1开始自增&#xff09;&#xff1b;接着PC把当前指令的地址给到MAR&#xff08;地址寄存器&#xff09;&#xff1b;MAR拿到当前地址后&…

Restaurants WebAPI(二)——DTO/CQRS

文章目录 项目地址一、DTO1.1 创建Restaurant的Dto1.2 修改之前未使用Dto的接口1.2.1 修改GetRestaurantByIdUseCase1.2.2 修改IGetRestaurantByIdUseCase接口1.2.3 再次请求接口1.3 显示Dish List1.3.1创建DishDto1.3.2 在RestaurantDto里添加DishDto1.3.3 使用Include添加Dis…

202412月最新植物大战僵尸杂交版【V3.0.1】更新内容与下载

以下是对UI优化和新内容添加的摘要&#xff1a; UI优化摘要&#xff1a; 主界面重做&#xff1a;对游戏的主界面进行全面的设计更新&#xff0c;提升用户体验。商店重做&#xff1a;对游戏内的商店界面进行重新设计&#xff0c;以改善玩家的购物体验。选卡界面增加图鉴功能&a…

MCU驱动使用

一、时钟的配置&#xff1a; AG32 通常使用 HSE 外部晶体&#xff08;范围&#xff1a;4M~16M&#xff09;。 AG32 中不需要手动设置 PLL 时钟&#xff08;时钟树由系统自动配置&#xff0c;无须用户关注&#xff09;。用户只需在配置文件中给出外部晶振频率和系统主频即可。 …

服务器防火墙设置某个端口号只允许固定 ip地址访问

服务器防火墙设置某个端口号只允许固定 ip地址访问是运维常见的功能&#xff0c;今天我们分享一下&#xff1a; 一、Linux环境 1、firewall 方式 1&#xff09;允许特定 IP 地址访问 23 端口 sudo firewall-cmd --zonepublic --add-rich-rulerule family"ipv4" s…

Hexo Next主题集成百度统计

个人博客地址&#xff1a;Hexo Next主题集成百度统计 | 一张假钞的真实世界。 首先&#xff0c;需要在百度统计控制台新增自己的站点。 点击“新增网站”按钮&#xff1a; 按照要求输入相关信息并保存&#xff0c;页面跳转至代码获取页面。从代码页面中拷贝网站的ID&#xff1…

8K+Red+Raw+ProRes422分享5个影视级视频素材网站

Hello&#xff0c;大家好&#xff0c;我是后期圈&#xff01; 在视频创作中&#xff0c;电影级的视频素材能够为作品增添专业质感&#xff0c;让画面更具冲击力。无论是广告、电影短片&#xff0c;还是品牌宣传&#xff0c;高质量的视频素材都是不可或缺的资源。然而&#xff…

JumpServer开源堡垒机搭建及使用

目录 一,产品介绍 二,功能介绍 三,系统架构 3.1 应用架构 3.2 组件说明 3.3 逻辑架构 3.3 逻辑架构 四,linux单机部署及方式选择 4.1 操作系统要求(JumpServer-v3系列版本) 4.1.1 数据库 4.1.3创建数据库参考 4.2 在线安装 4.2.1 环境访问 4.3 基于docker容…

华为云计算HCIE笔记01

第一章 华为云Stack解决方案 2018年云栖大会马云提出的数据科学时代&#xff08;Data technology&#xff09;&#xff0c;相较于传统信息时代&#xff0c;技术的变更主要集中在过去我们更加看重的是传输&#xff0c;也就是传统的网络建设&#xff0c;随着目前国家网络建设的完…

Redis的主从集群以及哨兵机制学习总结

Redis的主从集群以及哨兵机制 为什么要使用主从集群&#xff1f;部署主从集群主从集群怎么同步数据&#xff1f;数据同步的方式和时机实例查看主从数据同步原理增量同步潜在的问题主从集群的优化 主节点宕机怎么办&#xff1f;哨兵机制 为什么要使用主从集群&#xff1f; 我们…

【机器学习】机器学习的基本分类-强化学习(Reinforcement Learning, RL)

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种基于试错的方法&#xff0c;旨在通过智能体与环境的交互&#xff0c;学习能够最大化累积奖励的策略。以下是强化学习的详细介绍。 强化学习的核心概念 智能体&#xff08;Agent&#xff09; 执行动作并与环境…

行政管理痛点解决方案:OA系统助力企业提效减负

作为企业行政管理的中枢&#xff0c;行政部门承担着企业运转的核心职责。从办公物资采购到会议室安排&#xff0c;从流程审批到企业文化建设&#xff0c;行政工作繁杂且细致。然而&#xff0c;在传统管理模式下&#xff0c;行政工作往往面临以下痛点&#xff1a; 流程繁琐&…

Flask内存马学习

文章目录 参考文章环境搭建before_request方法构造内存马after_request方法构造内存马errorhandler方式构造内存马add_url_rule方式构造内存马 参考文章 https://www.mewo.cc/archives/10/ https://www.cnblogs.com/gxngxngxn/p/18181936 前人栽树, 后人乘凉 大佬们太nb了, …