注:转载时请注明原作者(lreis及出处(http://blog.csdn.net/lreis2010/)!
Maven的核心在于Pom(Project Object Model)。Maven通过项目中的pom.xml文件予以实现。
pom.xml对应的Java实体类是Model类。Maven通过ModelMerger对pom文件进行解析,采用xpp3技术。pom文件中对于项目的各个属性进行了描写。maven-版本.xsd文档中对于pom文件的规范给予了设定。(本文基于Maven-3.1.2-snapshot版本)
图1.1给出了Maven-4.0.0.xsd对应的部分UML图。图中可以看到描述Maven项目的各个属性。大致划分为一下几类:(附件中给出了xsd对应的完整的UML类图)
1)基本配置
2)环境配置
3)构建配置
4)其他配置
图1.1 UML类图
基本配置设定的是能够唯一标识该项目的一些基本属性,包括groupId、artifactId、version以及packaging。
2.1groupId
2.2 artifactId
2.3 version
2.4 packaging
基本配置的涵义在作者的另一篇博文(Maven核心概念(1)--坐标)已经给出了相应说明,不再赘述。
图3.1给出了issueManagement的UML类图。
图3.1 UML类图
issueManagement定义的是bug缺陷管理系统的属性,包括两个属性url和system。
system:缺陷管理系统的名称;
url:缺陷管理系统的URL地址。
例如:
图3.2给出了ciManagement的UML类图。
图3.2 UML类图
ciManagement定义的是持续集成的配置信息,包括system、url以及notifiers三个属性。
system:持续集成系统的名称;
url:持续集成系统的URL地址。
notifiers:配置了当构建时每一个需要通知的用户、通知的方式以及触发通知的事件。
1)通知的用户是通过address进行配置的;
2)通知的方式默认方式为email;
3)触发通知的事件包括以下及几种方式:sendOnError、sendOnFailure、sendOnSuccess以及sendOnWarning。
图3.3给出了mailingLists的UML类图。
3.3 UML类图
mailingLists定义的是该项目相关联的邮箱列表,该部分信息将在自动产生站点的时候予以引用。
SCM(Source Control Management)源代码控制管理系统定义了该项目源代码控制管理的地址,例如git、svn等。
scm定义的属性包括connection、developerConnection、tag以及url四个。
url:通过浏览器等可以访问到的该项目的地址;
connection:读取该项目资源版本库的地址;
developerConnection:类似于connection,使用去developer的地址;
tag:默认值为HEAD,当前源代码库的版本,开发过程中默认设置为HEAD。例如:netty(NIO项目)的配置
prerequisites定义的是构建该项目所需的最低maven版本号;默认值为2.0。
repositories定义了查询该项目依赖的构件的远程仓库。UML图见3.6
图3.6 UML类图
repositories包含了id、name、url、layout、releases以及snapshots。
其中id、name以及url不再赘述;
layout:在项目定位、存储各组件时候所采用的布局;该属性有default以及legacy两个值;默认值为default,legacy模式的含义作者尚未解析,暂时保留该疑问;(先在这请教各位同仁了)
releases以及snapshots都是RepositoryPolicy类型的数据,它定义了release版本或snapshot版本仓库的更新策略。
RepositoryPolicy解析
1)enabled:是否选用该仓库下载组件;
2)updatePolicy:组件的更新频率,包括always,
daily
(default),interval:XXX
(in minutes) or never
(only if it doesn't exist locally);
3)checksumPolicy:当组件验证失败后的处理策略:ignore
,fail
orwarn
(the default)。
pluginRepositories定义了查询该项目依赖的插件的远程仓库,也是一个Repository类型的数据,同3.6repositories。
distributionManagement设定了该项目的发布信息。图3.8给出了distributionManagement的UML类图。
图3.8 UML类图
distributionManagement包含了repository、snapshotRepository、site、downloadUrl、relocation以及status 6个属性。
1)repository:项目发布到一个远程仓库所需要的信息,是DeploymentRepository类型的数据。DeploymentRepository是在Repository的基础上新增了uniqueVersion的属性,该属性说明的是是否为snapshots版本新增时间戳以及构建序号,默认值为true,当该值为false时表示每次发布沿用相同的版本号;
2)snapshotRepository:同repository,该属性设定的是snapshot版本的发布信息;
3)site:该属性是Site类型的数据,表示的是该项目发布时的站点信息。包含三个属性:id、name、url;
4)downloadUrl:该项目的下载页URL;
5)relocation:描述的是项目重新定位后的版本号信息;
6)status
profiles:项目本地构建文件列表,如果使用,可改变默认构建过程。
配置信息中包括build属性。build中包含了构建该项目所需的信息。图4.1给出了build的UML类图。
图4.1 UML类图
build包含的各个属性。
sourceDirectory定义了包含项目源文件的路径。
scriptSourceDirectory定义了包含项目脚本文件的路径。
testSourceDirectory定义了单元测试源文件所在的路径。
outputDirectory定义了编译产生的类文件所在的路径。
testOutputDirectory定义了编译产生的测试类文件所在的路径。
extensions是build过程中需要使用到的产品。
4.7defaultGoal
defaultGoal,当项目中没有任何目标说明时,maven将执行该goal。
4.8filters
用于定义指定filter属性文件位置
4.9resources
resources描述了项目中资源的位置
未完,待续。。。