什么是Maven

官⽅对于Maven的描述: ApacheMavenisasoftwareprojectmanagementandcomprehensiontool. Basedonthe conceptofaprojectobjectmodel(POM),Mavencanmanageaproject'sbuild,reportingand documentationfromacentralpieceofinformation.

引⽤来⾃:https://maven.apache.org/index.html

翻译过来就是:

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

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

为什么要学Maven

⼀句话:简单,⽅便,提⾼我们的开发效率,减少我们的开发Bug.

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

1. 项⽬构建

2. 管理依赖

创建⼀个Maven项⽬

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

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

Maven 核⼼功能

接下来,我们结合项⽬,介绍Maven在项⽬开发中的作⽤.

主要体现在两个⽅⾯:

1. 项⽬构建

2. 管理依赖

项⽬构建

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

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

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

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

jar包就是把开发⼈员已经写好的⼀些代码进⾏打包.打好的jar包就可以引⼊到其他项⽬中,也可以直 接使⽤这些jar包中的类和属性.另外也可以打成可执⾏jar包,这样的包就可以通过java-jar命令来执 ⾏

war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西,通常⽤于⽹站.

依赖管理

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

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

依赖配置

依赖:指当前项⽬运⾏所需要的jar包. ⽐如前⾯学习JDBC时,我们需要⼿动下载mysql-connector-java的包.并且添加到项目里

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

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

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

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

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

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

3. 刷新完之后,就可以在项⽬中看到新加⼊的jar包

依赖传递

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

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

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

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

如上图,项⽬A通过Maven引⼊JarA时,会⾃动引⼊JarB和JarC. JarA和项⽬B就是项⽬A的直接依赖. JarB,JarC是间接依赖.

直接依赖:在当前项⽬中通过依赖配置建⽴的依赖关系

间接依赖:被依赖的资源如果依赖其他资源,当前项⽬间接依赖其他资源

依赖排除

当前阶段我们需要依赖的库并不多,但随着项⽬的越来越复杂,库之间的依赖关系也会变得越来越复杂. 如上图中,如果项⽬A不需要JarB,也可以通过排除依赖的⽅式来实现.

 排除依赖:

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

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

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>6.0.6</version>
 <!--排除依赖--> 
 <exclusions>
 <exclusion>
 <artifactId>spring-jcl</artifactId>
 <groupId>org.springframework</groupId>
 </exclusion>
 </exclusions>
</dependency>

maven还有⼀些功能是依赖调解,可选依赖等

依赖调解:

当项⽬中的依赖存在依赖冲突时,例如存在这样的依赖: A->B->C->X(1.0) A->D->X(2.0) Maven会采⽤最短路径优先的原则去选择依赖,这⾥2的依赖路径更短,所以会选择X(2.0),当然我们 也可以选择指定某个依赖的版本 当然也可以指定X的版本

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐