文章目录
- POM
- xml
- project
- modelVersion
- gav
- name
- packaging
- parent
- module
- properties
- dependency
- dependencyManagement和dependencies
- distributionManagement
- repository
- snapshotRepository
- build和profiles
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
两者都是管理依赖项的标签,两者区别如下:
- dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。
- dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的版本.
dependencyManagement让子项目引用依赖,而不用显示的列出版本号。
Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号,实现所有子项目使用的依赖项为同一版本。
- dependencyManagement 中的 dependencies 并不影响项目的依赖项;而独立dependencies元素则影响项目的依赖项。只有当外层的dependencies元素中没有指明版本信息时,dependencyManagement 中的 dependencies 元素才起作用。一个是项目依赖,一个是maven项目多模块情况时作依赖管理控制的。
dependencyManagement和dependencies
pom文件中的dependencyManagement和dependency
distributionManagement
配置:使用分发管理将项目打成jar包,上传到指定服务器
repository
正式版本,id元素是服务器中的用户名
snapshotRepository
开发版本,id元素是服务器中的用户名
build和profiles
pom中build和profiles