![Spring Boot趣味实战课](https://wfqqreader-1252317822.image.myqcloud.com/cover/509/44819509/b_44819509.jpg)
2.2 大管家Maven
本书选择Maven作为Jar包管理及构建工具。原因很简单,它拥有领先的市场份额。图2-1展示了来自《2020 JVM生态报告》的数据。
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_23_1.jpg?sign=1739440559-Daibn3ZmWRLlWuJpVgX8BoQMDsHl91kT-0-63e5f60d103e0d4714d77a9dbb2a24be)
图2-1 构建工具市场份额
2.2.1 pom文件
POM(Project Object Model,项目对象模型)是我们使用Maven的核心。pom文件使用XML语言编写,定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等。
pom文件示例:
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_23_2.jpg?sign=1739440559-JEk9awrjgN09FyJuwJSBDsHUt4kOFMiK-0-37e0c5f503190df800bf3b1594a0f7e6)
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_24_1.jpg?sign=1739440559-6Od3fpuKd0BoERPd1RQ7MmDLng2kuNvD-0-3dce0487077742c9a82d03e35a884ff0)
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_25_1.jpg?sign=1739440559-7tK6nSPerS1VbivwxU0MGduvugGuIYY4-0-d136ce528ac6bf28e61b319e114ffc25)
以上是一个pom文件示例,接下来我们一起学习几个常用的概念。
2.2.2 常用概念
坐标
坐标是Maven中非常重要的概念。我们在初中数学里就已经学习过这个概念,例如:(0,7)代表Y轴上距离原点7个单位的一个点。而我们在地理课里也学习过由经/纬度组成的坐标,例如:(东经116°23'51",北纬39°54'31")是天安门的坐标。那么Maven中的坐标是什么样子的呢?Maven中的坐标由以下3部分构成:
· groupId
· artifactId
· version
groupId代表组信息,通常是公司或者组织;artifactId是项目在组内的唯一标识;version就很简单了,代表项目的版本。我们通过一个具体示例来进一步理解:
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_25_2.jpg?sign=1739440559-ZTH5aX29NC6zkeZKoJpzy6oWruyjXcpu-0-c72ed80c1d937bda5129ae9b87df33be)
上面这个坐标代表Spring的Web模块,其版本为5.2.10.RELEASE。
在Java中,可以说“万物皆对象”,而在Maven中,则可以说“万物皆坐标”。一切Jar包或pom文件都可以用一个唯一的坐标来标识。
依赖
我们可以通过坐标来声明一个Jar包或pom文件(War包不能被引用,这里不讨论),还可以通过坐标来引用其他的Jar包或pom文件。依赖管理是Maven最重要的功能之一,项目依赖的所有Jar都需要通过如下格式放到<dependencies>标签下:
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_26_1.jpg?sign=1739440559-j7GC6eoCWAjxRz8rjrOVXl3CofuLMpR9-0-4763e8717ece36fcbc2197d04141a9ee)
继承
Maven中的继承和Java中的继承类似,都通过<parent>标签来标明继承关系。继承后,子工程会将父工程的相关特性应用到子工程中。例如:
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_26_2.jpg?sign=1739440559-t7oUxxNZiar5YwoeMUeAudtUDLoqJ16w-0-cb5c43273699797cdccef73042f522db)
构建
构建(Build),也就是我们所说的编译打包的过程,是Maven另外一个重要的功能,用于将我们的工程打成Jar包或War包。
Maven是通过集成插件的方式来实现构建功能的,可以根据不同的构建需求选择不同的插件。在Spring Boot项目中,默认使用spring-boot-maven-plugin插件进行构建,因为Spring Boot需要将工程打包成可执行的Jar文件,所以需要使用自己定制的构建插件。例如:
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_26_3.jpg?sign=1739440559-hYQwAsB4oSfPOpk1YuR4IwUy4dp9g3u1-0-c5dc78d601ae0468dad0277748f4fd69)