关闭

Maven源码解读--Model

标签: 心得体会maven源码解读
1171人阅读 评论(0) 收藏 举报
分类:

注:转载时请注明原作者(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.1给出了Maven-4.0.0.xsd对应的部分UML图。图中可以看到描述Maven项目的各个属性。大致划分为一下几类:(附件中给出了xsd对应的完整的UML类图)

         1)基本配置

         2)环境配置

         3)构建配置

         4)其他配置

1.1 UML类图

2.基本配置

基本配置设定的是能够唯一标识该项目的一些基本属性,包括groupId、artifactId、version以及packaging。

2.1groupId

2.2  artifactId

2.3 version

2.4  packaging

基本配置的涵义在作者的另一篇博文(Maven核心概念(1)--坐标)已经给出了相应说明,不再赘述。

3.环境配置

3.1issueManagement

图3.1给出了issueManagement的UML类图。
3.1 UML类图
issueManagement定义的是bug缺陷管理系统的属性,包括两个属性url和system。
system:缺陷管理系统的名称;
url:缺陷管理系统的URL地址。
例如:
 <issueManagement> 
   <system>Hero</system> 
   <url>http://localhost:8080/hero/issue</url> 
 </issueManagement>

3.2ciManagement

图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.3mailingLists

图3.3给出了mailingLists的UML类图。

3.3 UML类图

mailingLists定义的是该项目相关联的邮箱列表,该部分信息将在自动产生站点的时候予以引用。

3.4scm

SCM(Source Control Management)源代码控制管理系统定义了该项目源代码控制管理的地址,例如git、svn等。
scm定义的属性包括connection、developerConnection、tag以及url四个。
url:通过浏览器等可以访问到的该项目的地址;
connection:读取该项目资源版本库的地址;
developerConnection:类似于connection,使用去developer的地址;
tag:默认值为HEAD,当前源代码库的版本,开发过程中默认设置为HEAD。例如:netty(NIO项目)的配置
<scm>
    <url>https://github.com/netty/netty</url>
    <connection>scm:git:git://github.com/netty/netty.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/netty/netty.git</developerConnection>
    <tag>HEAD</tag>
  </scm>

3.5prerequisites

prerequisites定义的是构建该项目所需的最低maven版本号;默认值为2.0。

3.6repositories

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)。

3.7pluginRepositories

pluginRepositories定义了查询该项目依赖的插件的远程仓库,也是一个Repository类型的数据,同3.6repositories。

3.8distributionManagement

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

3.9profiles

profiles:项目本地构建文件列表,如果使用,可改变默认构建过程。

4.构建配置

配置信息中包括build属性。build中包含了构建该项目所需的信息。图4.1给出了build的UML类图。
图4.1 UML类图
build包含的各个属性。

4.1sourceDirectory

sourceDirectory定义了包含项目源文件的路径。

4.2scriptSourceDirectory

scriptSourceDirectory定义了包含项目脚本文件的路径。

4.3testSourceDirectory

testSourceDirectory定义了单元测试源文件所在的路径。

4.4outputDirectory

outputDirectory定义了编译产生的类文件所在的路径。

4.5testOutputDirectory

testOutputDirectory定义了编译产生的测试类文件所在的路径。

4.6extensions

extensions是build过程中需要使用到的产品。
4.7defaultGoal
defaultGoal,当项目中没有任何目标说明时,maven将执行该goal。
4.8filters
用于定义指定filter属性文件位置
4.9resources
resources描述了项目中资源的位置
未完,待续。。。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4456次
    • 积分:105
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条