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运行步骤,代码分析
  • shaoweijava
  • shaoweijava
  • 2017年07月05日 08:45
  • 1053

maven内部运行原理解析(一)

编程技术   maven至今还是Java编程语言构建的事实标准,大部分项目还在使用maven来进行构建,因此了解maven内部运行的原理对定位和分析问题还是很有裨益的。本篇文章主要介绍一些mave...
  • u012450329
  • u012450329
  • 2016年09月26日 11:41
  • 3361

maven 为何要模块划分-聚合/继承

模块划分  为了防止传递依赖,我们各个模块之间尽量用直接依赖的方式。本篇文章介绍多模块化开发,我们做过Maven项目的都知道,我们的项目一般都是分模块的,每个模块都会对应着一个POM.xml文件,它...
  • a1049107922
  • a1049107922
  • 2017年01月11日 20:29
  • 1828

maven源代码分析

@REM ---------------------------------------------------------------------------- @REM Licensed to ...
  • u011031754
  • u011031754
  • 2014年05月23日 18:03
  • 320

Maven打包生成源码包和Javadoc包

开发中我们经常需要将项目 org.apache.maven.plugins maven-compiler-plugin ...
  • FX_SKY
  • FX_SKY
  • 2016年12月12日 19:35
  • 4976

简单maven项目源码

  • 2017年08月14日 15:12
  • 16.09MB
  • 下载

maven下载源代码

有时候需要看源代码,在非maven项目里面 这就是需要文件名中,带source的jar包,release的,是看不到代码的 maven只要有源代码的,都可以看到,但是,通常不会主动...
  • petercnmei
  • petercnmei
  • 2017年01月22日 18:01
  • 1052

maven设置下载源码

转载自:http://blog.csdn.net/wpydaguan/article/details/43701571 第一种方法:Maven命令下载源码和javadocs 当在IDE中使...
  • ljxbbss
  • ljxbbss
  • 2017年09月22日 10:57
  • 987

maven如何实现创建带源代码的jar包

实现目标maven打包,在生成的jar包中带有源代码。
  • wang465745776
  • wang465745776
  • 2016年08月15日 17:11
  • 3565

maven项目不下载源码

今天捣鼓Spring springmvc mybatis +maven, 配置都搞好了。但是别人的maven项目都有源码。我问了下,是maven自己帮忙下载的。 百度了下maven配置,过然是自己没...
  • a695422768
  • a695422768
  • 2017年05月19日 10:29
  • 586
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven源码解读--Model
举报原因:
原因补充:

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