二、pom文件节点
pom.xml文件的节点大致可以分为以下几个部分:
4.0.0
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
接下来,我们就这几个部分进行挨个学习。
1. 基础配置信息
4.0.0
com.company.bank
parent
0.0.1-SNAPSHOT
war
pom.xml文件中,最外层的标签是project
标签,该标签定义了如下属性:
xmlns
属性:表明了该标签下元素的默认命名空间是:http://maven.apache.org/POM/4.0.0,xml文件中,定义命名空间的格式为:xmlns:namespace-prefix="namespaceURI",而定义默认命名空间的格式为:xmlns="namespaceURI";xmlns:xsi
属性:定义了一个namespace-prefix,其代表的命名空间URI为:http://www.w3.org/2001/XMLSchema-instance,定义该命名空间主要是为了更方便的使用其所代表的命名空间中的schemaLocation属性;其中,使用xsi作为namespace-prefix,并不是硬性规定,只是一种通用的选择,当然也可以改成别的命名;xsi:schemaLocation
属性:该属性的使用格式为:xsi:schemaLocation="namespaceURI1 schemaURI1 namespaceURI2 schemaURI2 ..."
,这里是说使用schemaURI1所对应的schema文件,校验命名空间namespaceURI1下的元素是否符合XML语法规范,后面的则是以此类推。
再来看一下基础信息的几个节点:
节点 | 对应的解释 |
---|---|
modelVersion | pom模型版本,根据官方文档,Maven2和3只能为4.0.0 |
groupId | 项目组id,表明该项目所属的组织或公司,命名规则通常为组织或公司域名反转,然后再加项目名称 |
artifactId | 项目的id,有时候和项目名保持一致,有时候是项目名 + 模块名 ,该id是唯一的,一个goupId下面可能会有多个artifactId,就是通过artifactId区分。比如:consumer-banking 。 |
version | 当前项目的版本号,一般是:大版本.小版本.增量版本-限定版本号 ,SHAPSHOT 意为快照,说明该项目还处于开发中 |
packaging | 项目的打包方式,常用可选值:pom, jar, ejb, maven-plugin, war, ear, rar, par 等,默认方式为jar |
2. 项目信息
下面再来看下项目的一些信息:
节点 | 对应的解释 |
---|---|
name | 声明了一个对于用户更加友好的项目名称,非必须项,一般用于Maven生成的文档 |
description | 项目的详细描述信息,能使用HTML格式描述时不建议使用纯文本来描述, 一般用于Maven生成的文档 |
url | 项目主页的url,一般用于Maven生成的文档 |
inceptionYear | 项目开始的年份,一般是4位数字,涉及到介绍情况时用作提供版权信息 |
licenses | 当前项目所有的许可文件,每一个许可文件用一个许可元素来描述,然后描述额外的元素。 通常只列出适用于这个项目的许可文件,无需列出依赖项目的 许可文件列表。如果列出多个license,那么用户可以选择其中所需的,而不是接受所有的许可文件。 |
organization | 组织相关信息 |
developers | 项目开发人员列表 |
contributors | 项目其他贡献者列表,同developers |
licenses列表:
...
....
repo
....
organization属性:
...
...
developers属性:
....
...
...
...
Java Dev
Web UI
sun
...
-5
contributors属性:
...
3. 依赖配置
dependencies
:项目相关依赖,如果父项目中的依赖,会被子项目引用,所以一般在父项目中定义子项目中共有的依赖。并且如果有需要,子项目可以修改所依赖包的版本:
junit
junit
4.12
parent
:用于确定父项目的坐标位置。
com.learnPro
SIP-parent
0.0.1-SNAPSHOT
dependencyManagement
:用于帮助管理children的依赖。例如如果parent使用dependencyManagement
定义了一个junit:junit4.0
,那么它的children就可以只引用 groupId和artifactId,而version就可以直接使用父模块的,如果有需要,我们也可以设置version,这样的好处就是可以集中管理依赖的详情,并且也更灵活。dependencyManagement
里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。配置同dependencies
类似;
junit
junit
4.12
test
junit
junit
dependencies几个重要的属性介绍:
- type属性,默认为jar,指定pom,可以定义整个pom文件;
- scope属性,当前包的依赖范围,用于限制依赖项的传递性,通过控制依赖的范围,可以指定该依赖在什么阶段有效。该属性共有5个值,默认是
compile
,也就是依赖关系在包含编译,测试,运行的所有类路径中都是可用的。而比如provided
,则是依赖关系在编译和测试阶段的类路径中是可用的。如需查看全部,可参考:Introduction to the Dependency Mechanism -Dependency Scope- optional属性,因为依赖是具有传递性的,例如 Project A 依赖于 Project B,B 依赖于 C,那么 B 对 C 的依赖关系也会传递给 A,如果我们不需要这种传递性依赖,就可以通过设置该属性的值。默认为false,即子项目默认都继承,true的话子项目必须显示的引入,与dependencyManagement里定义的依赖类似;
- exclusions和exclusion属性,用于移除项目依赖相关,如果项目X需要A,而A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion,将B从依赖树中删除即可。这一般用于解决jar包冲突的问题;
com.alibaba.china.shared
alibaba.apollo.webx
2.5.0
org.slf4j.slf4j-api
com.alibaba.external
modules
:Maven项目的一大特点就是以多模块著称,该标签就是用于指定当前项目所包含的模块,对该模块进行的Maven操作,会让所有子模块也进行相应的操作;
com-a>
com-b>
com-c>
properties
:该标签用于定义pom文件中的常量,这样,在pom文件的任何地方,都可以通过${java.version}
来引用该值;
3.2.6
com.alibaba.rocketmq
rocketmq-client
${rocketmq.version}
4. 构建配置
......
......
5. 环境配置
issueManagement
:用于缺陷系统的跟踪与管理,比如Bugzilla, Jira等管理工具:
Bugzilla
http://127.0.0.1/bugzilla/
ciManagement
:项目的持续集成信息:
continuum
http://127.0.0.1:8080/continuum
mail
true
true
false
false
[email protected]
- system:持续集成系统的名字
- url:持续集成系统的URL
- notifiers:构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告)
mailingLists
:项目相关邮件列表:
User List
[email protected]
[email protected]
[email protected]
http://127.0.0.1/user/
http://base.google.com/base/1/127.0.0.1
.....
- subscribe, unsubscribe: 订阅邮件(取消订阅)的地址或链接,如果是邮件地址,创建文档时,链接会被自动创建;
- archive:浏览邮件信息的URL;
- post:接收邮件的地址;
SCM
:(Source Control Management),该标签允许你配置你的代码库,供Maven Web站点和其他插件使用。
scm:svn:http://127.0.0.1/svn/my-project
scm:svn:https://127.0.0.1/svn/my-project
HEAD
http://127.0.0.1/websvn/my-project
scm:[provider]:[provider_specific]
,如果连接到CVS仓库,可以配置如下:scm:cvs:pserver:127.0.0.1:/cvs/root:my-project
prerequisites
:项目构建的前提。
2.0.6
repositories
,pluginRepositories
,依赖和扩展的远程仓库列表;pom里面的仓库与setting.xml里的仓库功能是一样的。主要的区别在于,pom里的仓库是个性化的。比如一家大公司里的setting文件是公用 的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要在pom里设置自己需要的仓库地址。而pluginRepositories
,与Repositories具有类似的结构,只是Repositories是dependencies的home,而这个是plugins 的home。
false
always
warn
true
never
fail
codehausSnapshots
Codehaus Snapshots
http://snapshots.maven.codehaus.org/maven2
default
...
profiles
:POM 4.0的一个新特性是一个项目能够根据所构建的环境改变设置。通过profiles,我们可以指定构建的环境是开发,测试,UAT,生产等环境;
...
test
...
...
...
...
...
...
...
...
...
我们可以通过activation标签来激活相应的profile,也就是指定要构建的默认的环境,并且可以配置各种需要的环境,并且激活profile的方式也有多种,具体参数可查看官网文档。
...
test
false
1.5
Windows XP
Windows
x86
5.1.2600
sparrow-type
African
${basedir}/file2.properties
${basedir}/file1.properties
...