Maven源码解读--Model

原创 2013年12月04日 18:59:12

注:转载时请注明原作者(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描述了项目中资源的位置
未完,待续。。。


maven运行原理分析,源码分析

maven运行步骤,代码分析

maven源代码分析

@REM ---------------------------------------------------------------------------- @REM Licensed to ...

maven 项目引用另一个maven项目生成的jar库(该库在本地maven库)

在别的项目中使用通过Maven安装生成的项目的jar包首先我在hello world项目中通过mvn clean install 命令构建hello world项目,同时会将这个项目的jar包(hel...
  • JQ_AK47
  • JQ_AK47
  • 2017年02月23日 23:30
  • 6525

Maven的项目对象模型(POM)

 Maven是以项目为中心的设计。POM是Maven对一个单一项目的描述。没有POM的话,Maven是毫无用处的——POM是Maven的核心。是POM实现的并驱动了这种以模型来描述的构建方式。 下面的...

maven运行原理分析,源码分析

maven运行步骤,代码分析

find命令中的print0和xargs -0

看到命令find . -name '*.h' -print0 | xargs -0 checkout-cache -f --
  • GSYzhu
  • GSYzhu
  • 2014年07月25日 13:32
  • 2621

DPM(Defomable Parts Model) 源码分析-训练(三)

首先调用格式: example: pascal('person', 2);   % train and evaluate a 2 component person model pascal_train...
  • soidnhp
  • soidnhp
  • 2013年10月22日 21:45
  • 9283

Mybatis Generator的model生成中文注释,支持oracle和mysql(通过修改源码的方式来实现)

在看本篇之前,最好先看一下上一篇通过实现CommentGenerator接口的方法来实现中文注释的例子,因为很多操作和上一篇基本是一致的,所以本篇可能不那么详细. 首先说一下上篇通过实现Comment...

QT View及Model源码解析

QT的Model用于保存数据,而QTView只是用于显示界面,大概关系如下,View的数据private中一般会有drawcell等方法,用于从model里面取数据绘制文字,表格,绘制的时候会根据每个...

【提供源码下载】使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件

其实这个没什么,但是能大大加快我们的开发速度。 只需要把一个配置文件配置好就行, ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven源码解读--Model
举报原因:
原因补充:

(最多只允许输入30个字)