POM文件浅析

POM

maven项目的核心是pom.xml,POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等。

下面对pom的一些标签进行简单介绍:

xml

指定了该xml文档的版本和编码方式

project

是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素,这些属性不是必须的,但能让IDE中的XML编辑器帮助开发者快速编辑POM。

modelVersion

指定当前POM模型的版本,对于Maven2和Maven3,该标签的值之恩那个是4.0.0。

gav

groupId是公司组织名;artifactId是模块名,在组中唯一的ID、version是版本号。这三个元素定义了一个项目的基本坐标,任何的jar、pom或者war都是基于这些基本坐标进行区分的。

name

用来声明一个对用户更友好的项目名称(非必须)

packaging

指定项目的打包类型:pom、jar、war。

使用maven进行模块划分管理,一般都会有一个父级项目,pom文件除了GAV(groupId, artifactId, version)是必须要配置的,另一个重要的属性就是packaging打包类型,所有的父级项目的packaging都为pom,packaging默认类型jar类型,如果不做配置,maven会将该项目打成jar包。作为父级项目,还有一个重要的属性,那就是modules,通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build。

对于各个子项目,需要在其对应的pom文件开头声明对父级项目的引用,通过GAV实现。对于子项目中自己的GAV配置,GV如果不配置,则会从父类项目的配置继承过来。子模块可以通过dependencies标签来添加自己的依赖,此外子类项目的packaging值只能是war或jar。如果是需要部署的项目,一般是包含controller的module,需要打包成war类型,如果只是内部调用或者是作服务使用,则推荐打成jar包,是服务于war包的, 位于war包中的lib文件夹下。

Maven中pom.xml中

parent

包含待继承的父工程所需的信息,标签内的元素除了gva之外,还有一个元素relativePath,用来标注父工程pom文件的相对位置。

如果该工程属于父工程的子工程(即子工程文件夹在父工程文件夹内),文件夹起点是当前的pom.xml所属工程的目录,默认值为…/pom.xml,则relativePath取默认值即可。如果该工程是父工程的平级工程(即父工程和子工程的文件夹均在同一个目录下),则需要显示指出父工程的pom.xml的位置。

查找顺序为:relativePath元素中的地址–本地仓库–远程仓库

设定一个空值将始终从仓库中获取,不从本地路径获取

pom.xml中和详解

module

此标签在父工程的pom.xml中表示子模块的位置,以当前父工程所在的文件夹为基准,填写子模块的相对路径。如果是父工程的子工程,则直接填写其文件夹名即可。

properties

在properties标签内可以把版本号作为变量进行声明,方便maven依赖标签用${变量名}的形式动态获取版本号。这样做的优点是当版本号发生改变时,仅仅需要更新properties标签中的变量值就行了,不用煞费心思更新所有依赖的版本号。

properties标签介绍

dependency

具体的依赖项

dependencyManagement和dependencies

两者都是管理依赖项的标签,两者区别如下:

  1. dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。

  2. dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的版本.

    dependencyManagement让子项目引用依赖,而不用显示的列出版本号。

    Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号,实现所有子项目使用的依赖项为同一版本。

  3. dependencyManagement 中的 dependencies 并不影响项目的依赖项;而独立dependencies元素则影响项目的依赖项。只有当外层的dependencies元素中没有指明版本信息时,dependencyManagement 中的 dependencies 元素才起作用。一个是项目依赖,一个是maven项目多模块情况时作依赖管理控制的。

dependencyManagement和dependencies

pom文件中的dependencyManagement和dependency

distributionManagement

配置:使用分发管理将项目打成jar包,上传到指定服务器

repository

正式版本,id元素是服务器中的用户名

snapshotRepository

开发版本,id元素是服务器中的用户名

build和profiles

pom中build和profiles

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值