摘要:Maven是目前Java项目的主要项目管理工具,它具有管理方便、容易扩展的特点。该文简单介绍了Maven的原理、功能和生命周期等概念,重点结合Maven在网络管理软件产品中的实例应用,分析和总结了Maven在企业级软件产品中的具体使用。
关键词:Maven;插件;生命周期;网络管理 中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)07-1562-04
Applying Maven in Developing Enterprise Java Applications LI Jun-jie
(Beijing University of Posts and Telecommunications, Beijing 100876, China)
Abstract: Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. The paper introduces the basic concepts and principle of Maven. And summarize the best practices for effective Maven management in Java applications of NMS.
Key words: Maven; plugins; life cycle; Network Management(NMS) 1 Maven简介
Maven是一种Java技术,是Ant的进化,提供了一套软件项目管理的综合性方案.无论是编译,发布,文档还是团队协作,Maven提供了必要的抽象,它鼓励重用,并做了除了软件构建以外的许多工作。作为项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven的主要目标是使开发人员在最短的时间里有效地理解整个开发过程,因此它实现了: 1) 项目构建过程更加容易
Maven针对项目细节进行了封装,使用户并不需要了解底层的结构,就可以轻松构建起整个项目。 2) 提供统一的项目构建系统
Maven提供统一的构建系统:采用Project Object Model(POM)定义和构建一个项目,并且以插件(Plugins)的方
式共享给所有使用Maven的项目。因此一旦你熟悉了自己之前的某一个Maven项目的构建之后,你也就知道了所有Maven项目的构建,节省了大量的需要对项目结构了解才能构建的时间。
3) 提供有效地项目信息
通过POM信息和项目源码,Maven可以提供大量有用的项目信息。比如:修改代码管理产生的日志文件、代码之间的交叉引用、邮件列表、项目依赖关系、包含代码覆盖率的单元测试报告等。当然,基于POM,Maven还可以提供更多的产品标准信息
4) 为最佳开发实践提供准则
Maven集合了当前最佳开发实践的准则,并使之更加简便的应用在项目中。例如最常见的单元测试最佳实践要求。Maven也提供协助项目工作流,比如版本管理和问题跟踪。 2 Maven的基本功能
Maven的安装和配置不是本文的重点,所以假定你已经对Maven有了一定的了解,并且已经成功的安装了Maven。如果不是,请首先参考Maven的官方网站(http:// maven.apache.org/)进行前期的准备和学习。 2.1 Maven基本结构
Maven 的基本元就是项目(Project),任何一个包含有pom.xml 文件的目录都是一个项目。一个项目可以依赖其它
的项目,一个项目也可以由多个模块(子项目)构成,Maven 在项目之间还提供了继承。
Maven 的基本结构包括仓库(Repository)和pom.xml。其中仓库包括两种:远程仓库、本地仓库,它们都可以用声明的方式进行配置。本地仓库的缺省位置为“.m2/repository”目录,也可以在settings.xml中进行指定配置。Maven 将pom.xml 中定义的jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的jar,同一个版本的jar 只需下载一次,而且避免每个应用都去拷贝jar,仓库将会帮助开发者在多个项目间共享库。同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,在执行maven 任务时,会自动下载需要的插件。 每个项目也可以自己构建制品,然后部署到远程仓库中。
2.2 Maven生命周期
Maven 的中心概念就是构建生命周期。有三种内建的构建生命周期:default,clean 和site。default 周期处理你的项目分发,clean 周期处理项目的清理,而site 周期处理你的项目节点的文档建立。每一个构建生命周期分为不同的构建阶段,这些构建阶段表现生命周期的一个执行过程。表1 列举了default 周期的主要构造阶段。这些阶段在完成default 周期的过程中顺序执行,其中有些阶段会因为项目不需要而
省略。在Maven 插件开发中要参照这些阶段安排插件的执行顺序。
3 Maven在软件产品中的应用
本节以我们要开发一个网管软件产品为例,产品名称为GNMP,包含两个子模块BASE和KERNEL,产品结构如图2。
3.1 产品版本管理
首先在项目的根目录对象模型(\\gnmp\\pom.xml)中定义项目的基本信息和产品版本信息: com.study.oam gnmp 0.1.0 pom GNMP Study Maven 2010
也可以在其中定义更多的项目信息,如开发机构、开发人员、邮件列表等: … … … …
… … … … …
定义该产品包含的模块: base kernel
然后在这两个模块的对象模型(pom.xml)中定义各自的项目基本信息,并且设置父模型为gnmp,则模块的版本和其他基本信息继承自父模型中的对应内容。以base为例(\\gnmp\\base\\pom.xml): com.study.oam.gnmp base jar
com.study.oam gnmp 0.1.0 ../pom.xml
3.2 产品插件依赖管理
可以在gnmp对象模型中定义全局的依赖管理,规定项目整体使用的第三方依赖及其版本:
org.apache log4j 1.2.15 org junit
3.8.2.v200706111738
在模块实现中只需要定义直接依赖的插件名称,无需指定版本,实现插件的统一管理。仍以base为例:
org.apache log4j org junit
3.3 产品编译
在项目对象模型中可以定义需要的属性,如我们可以定义全局Java版本为1.5,并设定为编译环境: 1.5
org.apache.maven.plugins maven-compiler-plugin
${java-version} ${java-version}
3.4 单元测试
Maven 内建了对单元测试的支持,测试是Maven 默认生命周期的一部分。在工程目录下的“src/test/java/”中创建单元测试类,继承JUnit定义的TestCase类,并遵从JUnit测试管理模式:一个构造函数接受一个单独的String参数并调用父类的构造函数;一系列以“test”开头的公有方法,作为单元测试被调用。
对于测试的运行,我们也可以添加测试范围依赖。测试范围依赖是只有在测试编译和测试运行时在classpath中有效的依赖。在项目打包阶段,测试范围依赖也不会包含在项目的打包输出中。
以base项目为例,加入对JUnit的测试依赖: com.study.oam.gnmp base jar …… ……
org junit test
对于某些时候或者某些工程,你可能希望在生命周期中跳过单元测试阶段,例如仅仅想要打包生成jar文件,而不去修复单元测试。则需要用到Surefire插件,以kernel为例: com.study.oam.gnmp kernel jar ……
org.apache.maven.plugins maven-surefire-plugin true
3.5 项目报告
Maven的Site生命周期阶段可以生成项目的报告,它包含了项目基本信息,依赖,相关开发人员信息,单元测试结果等。其中单元测试代码覆盖率Clover报告是最常用,并且需要额外设置和定制的。
首先在default和site生命周期中加入clover插件,并设定相关参数,具体如下: true false true
org.apache.maven.plugins maven-clover-plugin
2.5.1-SNAPSHOT
${clover.license.path} 1.5 test package
instrument
org.apache.maven.plugins
maven-clover-plugin
${clover.generateHtml} ${clover.generatePdf} ${clover.generateXml} ${clover.license.path}
4 结束语
本文简单介绍了Maven 这种项目管理工具,并通过在软件产品中的应用分析了Maven 插件的具体使用方法。Maven 的设计目的是简化项目开发工程中各阶段的管理,它功能强大,扩展灵活的特点使它具有大量的插件,也提供了方便研发人员针对自己的不同项目开发Maven 插件的接口。 参考文献:
[1] Maven官方网站[EB/OL].http://maven.apache.org. [2] van Zyl J,Casey J,Massol V,et al.Better Builds with Maven[M].Mergere,Inc,2006.
[3] Massol V,O'Brien T M.Maven:A Developer's Notebook[M].O'Reily,2005.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务