【JavaEE进阶】 关于Maven

文章目录

  • 什么是Maven
  • 为什么要学Maven
  • 创建⼀个Maven项⽬
  • Maven核⼼功能
    • 项⽬构建
    • 依赖管理
        • 依赖配置
        • 依赖传递
        • 依赖排除
  • Maven Help插件
  • Maven 仓库
    • 本地仓库
    • 中央仓库
    • 私服
  • ⭕总结

什么是Maven

Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念,Maven可以通过⼀⼩段描述信息来管理项⽬的构建,报告和⽂档的项⽬管理⼯具软件。

⼤⽩话:Maven是⼀个项⽬管理⼯具,通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包

为什么要学Maven

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

创建⼀个Maven项⽬

关于Maven项目的创建可以参考博主写的

【JavaEE进阶】 Spring 的创建和使⽤

如果Maven jar包下载失败,可以参考博主写的

【JavaEE进阶】 Maven jar 包下载失败问题的解决方法

Maven核⼼功能

Maven提供的功能⾮常多,Maven在项⽬开发中的作⽤.

主要体现在两个⽅⾯:

  1. 项⽬构建

  2. 管理依赖

项⽬构建

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

⽐如,点击package,就可以完成项⽬的打包操作

【JavaEE进阶】 关于Maven_第2张图片
【JavaEE进阶】 关于Maven_第3张图片
打包就是把所有的class⽂件,全部放在⼀起,打成jar包或者war包

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

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

依赖管理

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

pom.xml就是maven的配置⽂件,⽤以描述项⽬的各种信息

依赖配置

而我们一般是需要对pom.xml中引⼊相应的依赖。

⽐如博主在前面讲JDBC编程时,我们需要⼿动下载mysql-connector-java的包.并且添加到项⽬中.
【JavaEE进阶】 关于Maven_第4张图片

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

<dependencies>
<!--⾥⾯放置项⽬的依赖坐标, 可为多个 -->
</dependencies>

在pom⽂件 标签内,添加依赖坐标

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

点击刷新按钮,引⼊新加⼊的依赖jar包

后续有添加新的jar包,或者修改jar包版本,都需要通过该⽅式在项⽬中添加依赖.

【JavaEE进阶】 关于Maven_第5张图片

依赖传递

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

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

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

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

【JavaEE进阶】 关于Maven_第6张图片
如上图,项⽬A通过Maven引⼊Jar A时,会⾃动引⼊Jar B 和Jar C.

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

依赖排除

排除依赖: 指主动断开依赖的资源。(被排除的资源⽆需指定版本)

当前阶段我们需要依赖的库并不多,但随着项⽬的越来越复杂,库之间的依赖关系也会变得越来越复杂.

⽐如,我下了⼀个快递单⼦,默认会有⼀个服务,就是快递⼩哥会上⻔取件,但是我刚好要出⻔,⽽且顺路经过站点,也可以选择⾃⼰送过去

如上面所讲, 如果项⽬A不需要Jar B,也可以通过排除依赖的⽅式来实现.

Maven Help插件

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

安装插件:File -> Settings ->Plugins -> 搜索Maven Help -> 找到对应插件, 点击Install 安装即可, 安装后需要重启下idea,才能⽣效
【JavaEE进阶】 关于Maven_第7张图片

Maven 仓库

我们通过短短⼏⾏代码,就把依赖jar包放在了项⽬⾥,具体是如何做的呢?

比如我们上面导入的mysql的jar包

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

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

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

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

本地仓库

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

当项⽬中引⼊对应依赖jar包后,⾸先会查找本地仓库中是否有对应的jar包
• 如果有,则在项⽬直接引⽤

• 如果没有,则去中央仓库中下载对应的jar包到本地仓库
【JavaEE进阶】 关于Maven_第8张图片
本地仓库地址可以通过Maven配置查看:

File -> Settings

【JavaEE进阶】 关于Maven_第9张图片

中央仓库

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

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

可以通过https://mvnrepository.com这个⽹站来查询并下载

那我们如何查找我们想要的jar包呢?可以分为以下三步

  1. 访问https://mvnrepository.com/

  2. 进⾏查找,⽐如mysql

【JavaEE进阶】 关于Maven_第10张图片

  1. 选择要添加的Jar包版本
    【JavaEE进阶】 关于Maven_第11张图片
  2. 查看Jar包对应坐标
    【JavaEE进阶】 关于Maven_第12张图片

私服

私有服务器,也称为私服

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

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

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

【JavaEE进阶】 关于Maven_第13张图片
当Maven需要下载资源的时候

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

⭕总结

关于《【JavaEE进阶】 关于Maven》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

你可能感兴趣的:(JavaEE进阶,java-ee,maven,java,spring)