maven2详细教程.docx

上传人:b****5 文档编号:11976516 上传时间:2023-04-16 格式:DOCX 页数:37 大小:174.66KB
下载 相关 举报
maven2详细教程.docx_第1页
第1页 / 共37页
maven2详细教程.docx_第2页
第2页 / 共37页
maven2详细教程.docx_第3页
第3页 / 共37页
maven2详细教程.docx_第4页
第4页 / 共37页
maven2详细教程.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

maven2详细教程.docx

《maven2详细教程.docx》由会员分享,可在线阅读,更多相关《maven2详细教程.docx(37页珍藏版)》请在冰豆网上搜索。

maven2详细教程.docx

maven2详细教程

Maven2详细教程

开始之前

现代软件开发基于健壮的企业级开源技术,它需要一类新的构建工具和项目协作工具。

ApacheMaven2的核心引擎旨在简化往往十分复杂的大型协作性软件项目的构建和管理。

在大型项目团队环境中工作是种挑战,而Maven2以友好为设计目的,即便对那些不熟悉这种挑战的开发人员而言,Maven2也足够友好。

本教程首先围绕单个的新手开发展开,然后逐渐介绍Maven2中的一些协作性的概念和功能。

我们鼓励您在本教程提供的介绍之上,探究本文范围之外的Maven2的一些高级功能。

关于本教程

本教程将循序渐进地向您介绍有关Maven2的基础概念和实践练习,具体内容包括:

∙Maven2概览

∙理解Maven2依赖项管理模型

∙Maven2存储库和Maven2坐标

∙Maven2生命周期、阶段、插件和mojo

∙下载和安装Maven2

∙实践Maven2——您的第一个Maven2项目

∙定制项目对象模型(POM)

∙参与多个项目

∙实践Maven2——参与多个项目构建

∙在Eclipse3.2中安装Maven2.xPlug-in

∙在Eclipse3.2中使用Maven2.xPlug-in

读完本教程,您会理解并欣赏Maven2背后的设计理念。

也将进一步熟悉在使用Maven2构建的项目中工作所需的基本技能。

这是一张通往Apache和Codehaus社区中大多数大型项目的通行证。

最为重要的是,您将可以把Maven2应用到日常的项目构建和管理活动中。

先决条件

您应当大体上熟悉Java™开发。

本教程假设您理解构建工具的价值和基本操作,包括依赖项管理和输出打包。

要求您能将Eclipse3.2用作IDE,从而在Eclipse中使用Maven2.x插件。

如果您熟悉大型开源项目(如Apache软件基金会管理下的项目),那就太好了。

理解Java5编码(包括泛型)会很有帮助。

如果有各种项目构建技术的经验(如Ant、autoconf、make和nmake)也很好,但不做强制性要求。

系统需求

为继续学习和试验本教程中的代码,您需要有效安装Sun'sJDK1.5.0_09(或其后的版本)或IBMJDK1.5.0SR3。

针对教程中关于Eclipse的Maven2.x的插件部分,需要有效安装Eclipse3.2.1或其后版本。

本教程的推荐系统配置如下:

∙支持上述JDK/JRE的系统,有至少1GB的主存

∙有至少20MB的磁盘空间来安装软件组件和样例

本教程中的说明基于MicrosoftWindows操作系统。

教程中涵盖的所有工具也可以在Linux®和UNIX®系统上运行。

Maven2概览

Maven是一个顶级的ApacheSoftwareFoundation开源项目,创建它最初是为了管理JakartaTurbine项目复杂的构建过程。

从那以后,不论是开源开发项目还是私有开发项目都选择Maven作为项目构建系统。

Maven快速地发展着,如今已是第二版,Maven已经从针对单个复杂项目的定制构建工具成长为广泛使用的构建管理系统,其丰富的功能可以应用于大多数的软件开发场景。

概括来讲,Maven2能够:

∙理解项目通常是如何构建的。

∙利用其内嵌的项目知识简化和便利项目构建。

∙利用其内嵌的项目知识来帮助用户理解复杂的项目结构和构建过程中潜在的变数。

∙设计并实现一个经证实的依赖项管理系统,该系统顺应了当今全球化和相互联系的项目团队的需求。

∙利用其内部知识,针对简单项目提供简单的用户体验。

∙对于高级用户来说相当灵活;针对特别的应用场景,可以覆盖其内嵌模型,也可以通过配置、部署元数据或创建自定义插件对其内嵌模型进行改写。

∙全面扩展现有行为之外的场景细节。

∙捕获新出现的最佳实践和各个用户社区间的经确认的共同性,并将它们纳入到Maven的内嵌项目知识中,从而不断地得到改进。

Maven2——概念性的概览

为捕捉项目构建知识,Maven2依赖于一套发展中的有关事物如何运转的概念性模型。

部分模型被硬编码为Maven代码库的一部分,这些模型通过新的Maven发布版本不断得到精炼。

图1解释了Maven2的关键模型:

图1.Maven2对象和操作模型

图1中的关键组件为:

∙项目对象模型(POM):

POM是Maven2中的里程碑式的模型。

该模型的一部分已经构建到Maven引擎(被亲切地称为反应堆)中,其余部分则通过一个名叫pom.xml的基于XML的元数据文件来声明。

∙依赖项管理模型:

Maven对如何管理项目的依赖项很在行。

依赖项管理是一片灰色地带,典型的构建-管理工具和系统都未明确涉及。

Maven2构建了Maven依赖项管理模型,该模型能够适应大多数需求。

这个模型被证明是有效而高产的模型,目前,主要的开源项目都部署了该模型。

∙构建生命周期和阶段:

和POM相关的概念是构建生命周期和阶段。

这是Maven2的内嵌概念模型和现实物理世界之间的接口。

使用Maven时,工作主要是通过插件来执行的。

在构建周期中,Maven2通过遵循一系列定义好的阶段,将这些插件协调起来。

如果您对其中一些概念还有点模糊,请不要担心。

接下来的部分会用具体的例子来巩固这些模型背后的概念。

Maven2——物理概览

图2揭示了Maven2的操作方式和与之交互的方式,同时显示了它的物理构成。

图2提供了有关如何与Maven进行交互的概览:

图2.Maven2操作和交互模型

图2中,POM是Maven对您的特定项目的理解。

这个模型由包含在一系列pom.xml文件中的声明性描述构成。

这些pom.xml文件构成一棵树,每个文件能从其父文件中继承属性。

Maven2提供一个SuperPOM。

这个SuperPOM位于层级树的顶端,它包含所有项目的默认通用属性;每个项目的POM都从这个SuperPOM处继承。

依赖项被指定为pom.xml文件的一部分。

Maven根据其依赖项管理模型解析项目依赖项。

Maven2在本地存储库和全球存储库寻找依赖性组件(在Maven术语里称作工件)。

在远程存储库中解析的工件被下载到本地存储库中,以便使接下来的访问可以有效进行。

Maven2中的这个依赖项解析器可以处理可递依赖项。

即,它能有效地解析您的依赖项所依赖的那些依赖项。

Maven引擎通过插件亲自执行几乎所有的文件处理任务。

插件被配置和描述在pom.xml文件中。

依赖项管理系统将插件当作工件来处理,并根据构建任务的需要来下载插件。

每个插件都能和生命周期中的不同阶段联系起来。

Maven引擎有一个状态机,它运行在生命周期的各个阶段,在必要的时候调用插件。

理解Maven2依赖项管理模型

在有效利用Maven2之前,您需要理解Maven2依赖项管理模型是如何运行的。

依赖项开发适应于这样的项目,其软件组件(称作模块)是由不同的项目团队开发的。

它支持持续独立开发,也支持对所有依赖模块进行精炼。

这个团队协作场景在通过Internet建立和维护的开源项目中十分常见,由于内部开发大受开源或外包世界的冲击和影响,这种场景在合作开发的圈子里日益盛行。

解析项目依赖项

Maven2依赖项管理引擎帮助解析构建过程中的项目依赖项。

Maven本地存储库和远程存储库

Maven2本地存储库是磁盘上的一个目录,通常位于HomeDirectory/.m2/repository。

这个库扮演着高性能本地缓存的角色,存储着在依赖项解析过程中下载的工件。

远程存储库要通过网络访问。

可以在settings.xml配置文件中维护一个远程存储库列表以备使用。

实践中,依赖项在pom.xml文件内的元素中指定,并作为POM的一部分注入到Maven中。

项目依赖项存储在存储库服务器(在Maven术语中简单地称之为存储库)上。

要成功的解析依赖项,需要从包含该工件的存储库里找到所需的依赖性工件。

通过settings.xml配置Maven

可以在一个settings.xml文件中指定影响Maven操作的配置属性。

默认的设置文件是MavenInstallationDirectory/conf/settings.xml。

Maven2用户可通过维护UserHomeDirectory/.m2/settings.xml来覆盖一些配置属性。

参见Maven设置参考,获取更多有关可配置设置的信息。

基于POM中的项目依赖项信息,该依赖项解析器试图以下列方式解析依赖项:

1.检查本地存储库中的依赖项。

2.检查远程存储库列表中的依赖项。

3.如果前两步失败,则报告一个错误。

默认情况下,第二步中所涉及的第一个远程存储库是一个能在全球访问的集中式Maven2存储库,它包含了最流行的开源项目的一些工件。

在内部开发中,可以设置额外的远程存储库来包含从内部开发模块中发布的工件。

可以使用settings.xml中的元素来配置这些额外的远程存储库。

确保单个的工件

将Maven2用于项目构建时,依赖项解析通过一个集中的存储库确保只存在一个依赖性工件,而不考虑有多少项目或子项目引用该工件。

这是多模块项目构建中一个重要的属性,因为包含多个工件会导致一些项目一致性和集成方面的问题。

存储库和坐标

Maven2存储库存储Maven在一个项目的依赖项解析中使用过的工件集。

在本地磁盘上访问本地存储库,通过网络访问远程存储库。

工件通常被打包成包含二进制库或可执行库的JAR文件。

这被认为是工件的一个类型。

但在实践中,工件也可以是WAR、EAR或其他代码捆绑类型。

Maven2利用操作系统的目录结构对存储在存储库中的工件集进行快速索引。

这个存储库索引系统依赖于这种能力来通过工件的坐标惟一标识工件。

Maven坐标

Maven坐标是一组可以惟一标识工件的三元组值。

坐标包含了下列三条信息:

∙组ID:

代表制造该工件的实体或组织。

例如,com.ibm.devworks就是一个组ID。

∙工件ID:

实际的工件的名称。

例如,主体类名为OpsImp的项目也许会用OpsImp作为其工件ID。

∙版本:

该工件的版本号。

支持的格式为mmm.nnn.bbb-qqqqqqq-dd,其中,mmm是主版本号,nnn是次版本号,bbb代表其bug修复水平。

qqqqq(限定词)或dd(构建号)也能添加到版本号中,这两项是可选项。

对Maven坐标的使用贯穿于Maven配置文件和POM文件中。

例如,要在命名为OpsImp的模块上指定项目依赖项(在1.0-SNAPSHOT级别),pom.xml文件应包含清单1所示的部分:

清单1.OpsImp样例模块的Maven坐标

com.ibm.devworks

OpsImp

1.0-SNAPSHOT

特别限定词SNAPSHOT告诉Maven2:

该项目或模块还处于开发状态中,它应该获取最新版的可用工件。

要将该项目指定为依赖于JUnit进行单元测试,可以将JUnit3.8.1的坐标作为一个依赖项添加到该项目的pom.xml文件中,如清单2所示:

清单2.JUnit依赖项的Maven坐标

junit

junit

3.8.1

深入Maven存储库

由于Maven存储库是普通的目录树,所以可以很容易地看到工件是如何存储到磁盘上的。

图3是本地存储库的一部分,显示了JUnit3.8.1工件的位置:

图3.Maven2存储库内幕

从图3中可以看出,Maven维护了一个工件的POM文件,同时也为该工件和其存储库中的POM维护了检验和散列。

当工件在存储库间转移时,这些文件帮助确保工件的完整性。

该工件已由Maven的依赖项管理引擎从中央存储库下载并放置到本地存储库中。

在图4中,坐标为com.ibm.devworks/OpsImp/1.0-SNAPSHOT的工件显示在本地存储库中。

该工件和POM文件一起存放在存储库。

在本例中,该工件在本地安装。

图4.本地存储库中的OpsImp工件

Maven2生命周期、阶段、插件和mojo

Maven通过插件动作完成大多数构建任务。

可以把Maven引擎认为是插件动作的协调器。

插件中的Mojo

插件是适应Maven的插件框架的软件模块。

现在,可以使用Java、Ant或Beanshell来创建自定义插件。

插件中的每个任务称作一个mojo。

有时,插件也被视为一套相关的mojo。

创建自定义的Maven2插件超出了本教程的范围;参见参考资料,以获取更多信息。

Maven2是预先打包好的,以便于下载,它和许多常用插件一起使用。

大多数典型开发任务不需要使用额外插件。

在开始编写自己的插件前,您应该先参考一下列出流行Maven2插件的Web站点(参见参考资料),看一下您需要的插件是不是已经有了。

图5显示了MavenPluginMatrix(参见参考资料),它提供了许多可用插件的兼容性信息:

图5.MavenPluginMatrix

将mojo绑定到生命周期各阶段

Maven引擎在执行构建生命周期中相应的阶段时,执行插件中的mojo(构建任务)。

插件的mojo和生命周期中的阶段间的关联叫做绑定。

插件开发人员能够灵活地将一个或多个生命周期阶段和一个插件关联起来。

默认的生命周期的各阶段

Maven对构建生命周期的固定理解包含了许多不同的阶段。

表1简短地描述了各个阶段:

表1.Maven2默认生命周期的各阶段

生命周期阶段

描述

验证

确保当前配置和POM的内容是有效的。

这包含对pom.xml文件树的验证。

初始化

在执行构建生命周期的主任务之前可以进行初始化。

生成源码

代码生成器可以开始生成在以后阶段中处理或编译的源代码。

处理源码

提供解析、修改和转换源码。

常规源码和生成的源码都可以在这里处理。

生成资源

可以生成非源码资源。

通常包括元数据文件和配置文件。

处理资源

处理非源码资源。

修改、转换和重定位资源都能在这阶段发生。

编译

编译源码。

编译过的类被放到目标目录树中。

处理类

处理类文件转换和增强步骤。

字节码交织器和常用工具常在这一阶段操作。

生成测试源码

mojo可以生成要操作的单元测试代码。

处理测试源码

在编译前对测试源码执行任何必要的处理。

在这一阶段,可以修改、转换或复制源代码。

生成测试资源

允许生成与测试相关的(非源码)资源。

处理测试资源

可以处理、转换和重新定位与测试相关的资源。

测试编译

编译单元测试的源码。

测试

运行编译过的单元测试并累计结果。

打包

将可执行的二进制文件打包到一个分布式归档文件中,如JAR或WAR。

前集成测试

准备集成测试。

这种情况下的集成测试是指在一个受到一定控制的模拟的真实部署环境中测试代码。

这一步能将归档文件部署到一个服务器上执行。

集成测试

执行真正的集成测试。

后集成测试

解除集成测试准备。

这一步涉及测试环境重置或重新初始化。

检验

检验可部署归档的有效性和完整性。

过了这个阶段,将安装该归档。

安装

将该归档添加到本地Maven目录。

这一步让其他可能依赖该归档的模块可以使用它。

部署

将该归档添加到远程Maven目录。

这一步让这个工件能为更多的人所用。

Maven从开源社区中汲取了十多年的项目构建管理经验。

很难找到一个构建周期不符合表1中的生命周期阶段的软件项目。

启动Maven2引擎后,它会按顺序经历表1中的各阶段,执行可能与该阶段绑定的mojo。

每个mojo则可以使用Maven2丰富的POM支持、依赖项管理,也可以访问执行这一专门任务时的构建状态信息。

调用Maven2引擎时,可以将一个生命周期阶段指定为命令行参数。

该引擎一直执行到指定的阶段(包括该指定的阶段)。

包含的阶段中所有的mojo都会被触发。

简短地说,这就是Maven2的操作原理。

在下一部分里,您将直接面对操作。

对Maven操作、它的依赖项管理模型和它的POM有了基本的理解,您会发现实践Maven2是一项十分简单的练习。

下载和安装Maven2

根据下列步骤下载和安装Maven2:

1.从Maven项目的官方站点下载Maven2二进制文件(参见参考资料)。

2.将二进制发布文件解压到选定的目录。

3.将InstallationDirectory\bin目录添加到PATH环境变量。

为检验安装,键入mvn-help命令。

您将看到清单3中的帮助页面。

清单3.使用mvn-help命令检验安装

C:

\>mvn-help

usage:

mvn[options][][]

Options:

-C,--strict-checksumsFailthebuildifchecksumsdon'tmatch

-c,--lax-checksumsWarnifchecksumsdon'tmatch

-P,--activate-profilesComma-delimitedlistofprofilesto

activate

-ff,--fail-fastStopatfirstfailureinreactorizedbuilds

-fae,--fail-at-endOnlyfailthebuildafterwards;allowall

non-impactedbuildstocontinue

-B,--batch-modeRuninnon-interactive(batch)mode

-fn,--fail-neverNEVERfailthebuild,regardlessofproject

result

-up,--update-pluginsSynonymforcpu

-N,--non-recursiveDonotrecurseintosub-projects

-npr,--no-plugin-registryDon'tuse~/.m2/plugin-registry.xmlfor

pluginversions

-U,--update-snapshotsUpdateallsnapshotsregardlessof

repositorypolicies

-cpu,--check-plugin-updatesForceupToDatecheckforanyrelevant

registeredplugins

-npu,--no-plugin-updatesSuppressupToDatecheckforanyrelevant

registeredplugins

-D,--defineDefineasystemproperty

-X,--debugProduceexecutiondebugoutput

-e,--errorsProduceexecutionerrormessages

-f,--fileForcetheuseofanalternatePOMfile.

-h,--helpDisplayhelpinformation

-o,--offlineWorkoffline

-r,--reactorExecutegoalsforprojectfoundinthe

reactor

-s,--settingsAlternatepathfortheusersettingsfile

-v,--versionDisplayversioninformation

实践Maven2:

您的第一个Maven2项目

在第一个实践的例子里,您将看到如何用最小的努力使用Maven2构建简单项目。

Maven2内置的关于Java项目的知识消除了其他构建工具也许必须要经历的冗长的配置过程。

处理数值操作的类

该例使用了一个处理数值操作的类。

这个主体类的源代码(叫做NumOps)如清单4所示。

清单4.NumOps类

packagecom.ibm.devworks;

importjava.util.ArrayList;

importjava.util.Iterator;

importjava.util.List;

publicclassNumOps{

privateListops=newArrayList

();

publicNumOps(){

ops.add(newAddOps());

}

publicOperationgetOp(inti)

{Operationretval;

if(i>ops.size())

{retval=null;

}else{

retval=(Operation)ops.get(i);

}returnretval;

}

publicintsize(){

returnops.size();

}

publicstaticvoidmain(String[]args){

NumOpsnop=newNumOps();

for(inti=0;i

S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1