川哥教你Spring Boot 2实战
上QQ阅读APP看书,第一时间看更新

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基本结构:

上面代码列出的是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和库的版本。下面是示例:

Maven在处理依赖项时,它会将Spring Core库中指定版本下载到本地Maven存储库中,并在项目中引用。如果在依赖中没有指定版本,则会下载最新版本。

在pom.xml中,可以使用元素properties来管理各依赖的版本,有助于文档的阅读,比如下面示例:

这样,当有多个地方用到同一个元素spring.version时,只需要引用该元素即可,便于修改一处,达到统一修改的目的。

在POM文件中,一个重要的元素是build,其提供了Maven目标、已编译项目的目录以及应用程序的最终名称的描述。基本形式如以下代码所示:

在上面代码中,元素介绍如下:

· defaultGoal:执行build任务时,如果没有指定目标,将使用的默认值;

· directory:用于描述build目标文件的存放目录,默认在${basedir}/target目录;

· finalName:build目标文件的名称,默认为${artifactId}-${version};

· filters:定义∗.properties文件,包含一个properties列表,该列表会应用到支持filter的resources中。

在POM文件中,另一个重要特性是它对配置文件的支持,即元素profiles,包含了一组配置值。通过使用配置文件,可以为不同的环境(如生产/测试/开发)自定义构建,基本形式如以下代码所示:

以上介绍POM文件的基本构成,并能根据项目实际构建需要的POM文件,Maven重在解决Jar包依赖,并为项目中Jar包版本升级、测试、打包等提供方便,更重要的是,开发人员只需要关注项目具体本身,不再需要为其各种依赖所干扰。