Maven源码解读--Model

注:转载时请注明原作者(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)其他配置

Maven源码解读--Model_第1张图片

图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类图。

Maven源码解读--Model_第2张图片

3.1 UML类图

issueManagement定义的是bug缺陷管理系统的属性,包括两个属性url和system。

system:缺陷管理系统的名称;

url:缺陷管理系统的URL地址。

例如:

  
   Hero 
   http://localhost:8080/hero/issue 
 

3.2ciManagement

图3.2给出了ciManagement的UML类图。

Maven源码解读--Model_第3张图片

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类图。

 

Maven源码解读--Model_第4张图片

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项目)的配置


    https://github.com/netty/netty
    scm:git:git://github.com/netty/netty.git
    scm:git:ssh://[email protected]/netty/netty.git
    HEAD
 

3.5prerequisites

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

3.6repositories

repositories定义了查询该项目依赖的构件的远程仓库。UML图见3.6

Maven源码解读--Model_第5张图片

图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类图。

Maven源码解读--Model_第6张图片

图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类图。

Maven源码解读--Model_第7张图片

图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描述了项目中资源的位置

未完,待续。。。

 

 

你可能感兴趣的:(Maven)