![川哥教你Spring Boot 2实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/374/52842374/b_52842374.jpg)
1.6 Maven POM文件介绍
笔者之前写过一本书,由于Jar包管理工具还不成熟,需要手动加入Jar包,现在Maven已经很成熟,并被广泛应用,其作为管理Jar工具包很方便,当然还有其他的一些管理Jar工具,比如Ant和Gradle。本书主要使用Maven构建工具,故在这里有必要用一节进行讲解。
Maven是Java世界中构建工具之一,可以通过一小段描述信息来管理项目的构建。构建软件项目主要包括以下任务:下载依赖项,并在类路径上放置其他Jar,将源代码编译为二进制代码,运行测试,然后将编译后的代码打包成可部署的工件(如JAR、WAR和ZIP文件),以及部署这些工件到应用程序服务器或存储库。Maven能自动执行这些任务,最大限度地降低人工在手动构建软件时出错的可能,并将编译和打包代码的工作与代码构造分开。Maven主要功能有依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。
Maven项目的配置是通过项目对象模型(POM)完成的,即用pom.xml文件表示。POM描述了项目、管理依赖项,并配置用于构建软件的插件。正如前面示例中pom文件展示。下面是Maven基本结构:
![](https://epubservercos.yuewen.com/1627B1/31397905403685106/epubprivate/OEBPS/Images/Figure-P26_4355.jpg?sign=1738864323-LKNpuoawgptC4IPwjdzhnyc5TulUNjnL-0-2a3a4e282867f6730cf0061c96388966)
上面代码列出的是POM基本结构,其中元素project是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素等。
· modelVersion:用于描述POM模型的版本;
· groupId:用于描述创建项目所属公司或组唯一基本名称。这个名称应该和项目所在的组织或公司存在关联,定义方法一般都是网址倒序,例如com.zioer;
· artifactId:用于描述当前项目的唯一名称;
· version:描述当前项目的版本,SNAPSHOT意为快照,说明该项目还处在开发中,还有其他一些元素没有自动生成,比如下面元素;
· Packaging:用于描述打包方式,比如war、jar或zip等;
· Name:用于描述一个对于用户更为友好的项目名称;
· URL:用于描述项目的主页。
其中,groupId、artifactId和version组合在一起便形成唯一标识符,其是指定项目将使用哪些外部库版本的原理。
Maven的依赖管理是重点,项目无需在本地管理这些依赖,而是需要时从中央存储仓库中自动下载,那么在实际中,这就是依赖,需要提供groupId、artifactId和库的版本。下面是示例:
![](https://epubservercos.yuewen.com/1627B1/31397905403685106/epubprivate/OEBPS/Images/Figure-P27_4357.jpg?sign=1738864323-B34XqT9JgsZNbVyRo08U4wfIjr2VX7P9-0-c5823a0b4ae2db3e4528009df3029da3)
Maven在处理依赖项时,它会将Spring Core库中指定版本下载到本地Maven存储库中,并在项目中引用。如果在依赖中没有指定版本,则会下载最新版本。
在pom.xml中,可以使用元素properties来管理各依赖的版本,有助于文档的阅读,比如下面示例:
![](https://epubservercos.yuewen.com/1627B1/31397905403685106/epubprivate/OEBPS/Images/Figure-P27_4358.jpg?sign=1738864323-1qbEnvoz1fpxGngX03AY0IxcJcxqZeQo-0-57ba3648e5d0e1c65e572060fa271f83)
这样,当有多个地方用到同一个元素spring.version时,只需要引用该元素即可,便于修改一处,达到统一修改的目的。
在POM文件中,一个重要的元素是build,其提供了Maven目标、已编译项目的目录以及应用程序的最终名称的描述。基本形式如以下代码所示:
![](https://epubservercos.yuewen.com/1627B1/31397905403685106/epubprivate/OEBPS/Images/Figure-P27_4359.jpg?sign=1738864323-psAlzz0viUHrTqmIvKb9Hrw8VlyiFfBQ-0-7e50bfc246b5af9fbbde94eb6aab0173)
在上面代码中,元素介绍如下:
· defaultGoal:执行build任务时,如果没有指定目标,将使用的默认值;
· directory:用于描述build目标文件的存放目录,默认在${basedir}/target目录;
· finalName:build目标文件的名称,默认为${artifactId}-${version};
· filters:定义∗.properties文件,包含一个properties列表,该列表会应用到支持filter的resources中。
在POM文件中,另一个重要特性是它对配置文件的支持,即元素profiles,包含了一组配置值。通过使用配置文件,可以为不同的环境(如生产/测试/开发)自定义构建,基本形式如以下代码所示:
![](https://epubservercos.yuewen.com/1627B1/31397905403685106/epubprivate/OEBPS/Images/Figure-P28_4362.jpg?sign=1738864323-TxUYDKJWJtuMHVytmWJFwmWbY9IAFH37-0-c2d336ac58f93db0772061078c35424b)
以上介绍POM文件的基本构成,并能根据项目实际构建需要的POM文件,Maven重在解决Jar包依赖,并为项目中Jar包版本升级、测试、打包等提供方便,更重要的是,开发人员只需要关注项目具体本身,不再需要为其各种依赖所干扰。