![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=1739614193-UUriWCRnL1JpzU5qiz2acNpXN7d3K9Tw-0-a8209d9f0735f416aa2a96d40bb0528d)
图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=1739614193-oT3qkoJETxX0NvHktKYyWrhTPQAl9qG5-0-825544dd47cffd97b076d3f0369a3d2f)
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_24_1.jpg?sign=1739614193-xZrNOlnOmSeX5XAJSKsOf3qeaoZwkndG-0-de8e109b4d0d81cedd75911d964a4927)
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_25_1.jpg?sign=1739614193-7bg30vNl4wmktii5y9avNfJ51LVDnzVO-0-171f6044d6ec15bc240ebe4f56f85f2e)
以上是一个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=1739614193-9Ef7EPsZbG6gvXFdWrOoxOftJd2BrmZl-0-ac8e2cf08c0db3829d23007f5b5f79d2)
上面这个坐标代表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=1739614193-huytveig0fXfAfxWe5kqNFMIV9ttjcr4-0-961af497311b517f4c09073e68e8bdcf)
继承
Maven中的继承和Java中的继承类似,都通过<parent>标签来标明继承关系。继承后,子工程会将父工程的相关特性应用到子工程中。例如:
![](https://epubservercos.yuewen.com/97C3EF/23950113201172406/epubprivate/OEBPS/Images/43216_26_2.jpg?sign=1739614193-3EFxw3EHjs4J55o1Fl0wuOgCD8jkRCZr-0-bca3b6b418374041cfb5032da28cee40)
构建
构建(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=1739614193-ZufhMRfRUmsAuGf0PZ1uxQ8e5O5O63ET-0-929b78425c14c57662ee9fccf9c140f6)