Maven
项目管理工具介绍
2008-2-26

Maven介绍
Maven(/)是一个顶级的 Apache Software Foundation 开源项目,创建它最初是为了管理 Jakarta Turbine 项目复杂的构建过程,从那以后,不论是开源开发项目还是私有开发项目都选择 Maven 作为项目构建系统。Maven 快速地发展着,已经从针对单个复杂项目的定制构建工具成长为广泛使用的构建管理系统,其丰富的功能可以应用于大多数的软件开发场景。
概括来讲,Maven 2 能够:
理解项目通常是如何构建的。
利用其内嵌的项目知识简化和便利项目构建。
利用其内嵌的项目知识来帮助用户理解复杂的项目结构和构建过程中潜在的变数。
设计并实现一个经证实的依赖项管理系统,该系统顺应了当今全球化和相互联系的项目团队的需求。
对于高级用户来说相当灵活;针对特别的应用场景,可以覆盖其内嵌模型,也可以通过配置、部署或创建自定义插件对其内嵌模型进行改写。
全面扩展现有行为之外的场景细节。
捕获新出现的最佳实践和各个用户社区间的经确认的共同性,并将它们纳入到 Maven 的内嵌项目知识中,从而不断地得到改进。
由于 Maven 采用先进的面向项目的方法,许多 Apache项目现在使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
一、当前项目挑战
假如您是一位项目经理,也许您在实际的项目管理中遇到过下面的问题:
1.我同时有多个项目需要监控,所以没有时间去检查每个项目的质量。
2.开发的程序不稳定,经常容易出问题,而且无法到原因。
3.我不知道程序的质量如何,经常在项目结束时发现重大问题,但已经太晚。
4.虽然开发人员在写单元测试代码,但是不知道这些测试代码究竟能覆盖多少有用的代码。
5.每个开发小组都使用了不同版本的第三方类库,没有一个标准,集成工作简直成了一场噩梦。
6.项目之间关系非常复杂,理解其依赖关系是一件困难的事情。
7.由于项目规模太大,编译需要花费很长的时间,集成测试也比较困难,没有办法做到每日构建。
8.代码拷贝情况严重,很多地方都是相同的代码,而且很多人不习惯按照开发规范编写,没有经过整理,但是这些问题检查起来需要耗费大量的精力。
针对上述问题,Apache组织的Maven项目提供了很好的解决方案。
二、Maven提供的解决方案
1.我同时有多个项目需要监控,所以没有时间去检查每个项目的质量。
Maven提供了丰富的代码质量分析插件,并且通过Web站点的形式展示出来,通过把这些网站集成起来,项目经理就可以轻松的做到同时监控多个项目的质量。
这个列表是此项目中多个子项目的列表
2.开发的程序不稳定,经常容易出问题,但是却不知道程序的质量如何,而且总是在项目结束时发现重大问题,但已经太晚而且无法到原因。
Maven通过其提供的几种代码分析插件(测试代码覆盖率分析插件-Cobertura、重复代码分析插件-CPD、代码耦合度扩展性以及可维护性分析插件-JDepend、代码质量分析插件-PMD、项目依赖项分析插件-Project Dependencies等)实现对项目质量的监控,并通过持续化的单元测试,达到快速定位问题以及降低代码变化影响的目的。
代码耦合度扩展性以及可维护性分析报告
代码质量分析报告
另外Maven支持的持续化集成测试(Continuous Integration)也是避免项目后期风险的有效方法。
开源项目
3.虽然开发人员在写单元测试代码,但是不知道这些测试代码究竟能覆盖多少有用的代码。
Maven的测试代码覆盖率分析插件可以清楚地告诉您每个包的测试代码覆盖情况,甚至还可以告诉您每个类里面哪些语句没有被覆盖到等信息。
包测试代码覆盖情况,红为未覆盖的部分
类代码测试代码覆盖情况,红为未覆盖的部分
4.每个开发小组都使用了不同版本的第三方类库,没有一个标准,集成工作简直成了一场噩梦。
Maven提供了集中的组件库,每个项目的开发人员可以通过远程资源库(Centrue Repository)下载统一的第三方组件到本地的项目资源库中(Project Repository),完成所引用类库的第一关把控。而且Maven还可以支持建立局域网资源库,企业可以在局域网内部建立一个可共享的资源库,这样即使在不能连接外部的安全网络内也可以使用Maven带来的便利性。
另外,Maven还提供了项目依赖项功能(Dependency),即使开发项目最后还是出现了引用多个版本依赖项的问题,Maven也可以及时告诉项目管理者哪个项目引用了那几个版本第三方类库,如图:
5.项目之间关系非常复杂,理解其依赖关系是一件困难的事情。
Maven提供了项目依赖分析插件,可以分析出项目之前的依赖关系,如图:
6.由于项目规模太大,编译需要花费很长的时间,集成测试也比较困难,没有办法做到每日构建。
Maven虽然提供了在Eclipse下的可视化操作界面,但是她的功能完全可以通过命令行来完成,结合任务调度程序(如Windows自带的任务计划程序)可做到每日后台的定时构建,并及时反馈构建过程中的问题,不需要项目组每个人员花费大量的时间在编译上面。
7.代码拷贝情况严重,很多地方都是相同的代码,而且很多人不习惯按照开发规范编写,没有经过整理,但是这些问题检查起来需要耗费大量的精力。
Maven提供了三个插件来解决此问题,代码样式检查插件-CheckStyle、代码质量分析插件-PMD、重复代码分析插件-CPD,可以很容易的发现一些代码的质量以及编写规范问题,如图
代码样式检查插件-CheckStyle
代码质量分析插件-PMD
重复代码分析报告-CPD
   
三、Maven关键功能点
Maven是一个既能完成高效的Java程序构建,又能提供高级项目管理的强大软件项目管理工具。
1.Maven项目构建功能
a)资源库(Repository)-中心资源库、项目资源库、本地资源库。
b)单元测试、集成测试。
c)代码分析-代码重复分析、代码质量分析、编码样式分析等。
d)项目网站构建。
2.Maven项目管理站点
a)项目介绍-介绍、FAQ等。
b)项目信息-项目文档、项目依赖关系、待办事项、项目组成员列表等。
c)报表
3.1 Maven项目构建功能
Maven提供项目的构建功能,使用方便,功能完善,主要提供如下几个关键功能:
功能项
功能项说明
代码仓库管理(Repository)
可以把多个项目用到的第三方类库进行集中管理,统一版本,不同的项目可从这个代码仓库获取自己需要的类库。
单元测试
可自动执行代码目录中的单元测试(Unit Test)文件,并生成测试运行报告。
代码分析
自动分析代码质量,如耦合程度、可重用性、可维护性等。另外还可以查看编码规则应用情况。
项目网站构建
可以针对一个项目建立一个站点,让项目用户、项目组成员以及项目管理者可以直观的看到项目的基本信息以及代码分析情况。
3.2 Maven项目管理站点
由于分析功能基本上都是以项目站点报告的方式来展现,所以我们将以KMS Lucene项目为例简单讲解一下Maven项目站点的功能。
3.2.1 项目介绍
如果一个对项目不了解的人想快速了解KMS Lucene的功能和使用方法,Maven项目简介站点可让他快速了解项目的内容。
图1:项目简介
此部分主要包括项目简介、最佳实践、FAQ等,目的是让读者可以快速了解项目的情况,Maven的站点其实可以通过配置文件增加任意多的内容,通过配置站点配置文件您可以配置一个复杂的站点介绍网站,目前很多开源项目的网站就是通过这种方法构建的。
3.2.2 项目信息
项目信息部分主要是项目相关信息的入口,如项目文档、项目依赖关系、待办事项、项目组成员列表等。以下是项目信息网页截图。
图2:项目信息
此部分内容比较简单,不再详细说明。
3.2.3 代码分析报表
代码分析报表是最能体现Maven自动化成果的一部分,在这个部分中我们可以查看项目质量等重要报表,截图如下:
图3:分析报表
可查看的报表种类包括(包含各部分的中文释义):
Document
Description
Cobertura Test Coverage
Cobertura Test Coverage Report.
代码覆盖率
CPD Report
Duplicate code detection.
重复代码情况
JavaDocs
JavaDoc API documentation.
项目代码文档
JDepend
JDepend traverses Java class file directories and generates design quality metrics for each Java package. JDepend allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to manage package dependencies effectively.
代码质量报告,可通过此部分可分析设计质量,了解代码的可扩展性、可重用性以及可维护性。
Maven Surefire Report
Report on the test results of the project.
单元测试情况。
PMD Report
Verification of coding rules.
编码优化检查报告,PMD插件可检查如下质量问题:
可能的系统Bug比如空的 try/catch/finally/switch 语句。
无用代码比如没有使用过的本地变量、参数或私有方法等。
不合适的代码比如应该用StringBuffer但是使用了String的地方。
多余的表示方法比如在While循环中不必要的If语句。
重复代码拷贝粘贴的代码以及由此所产生的同类Bug。
Source Xref
HTML based, cross-reference version of Java source code.
HTML格式的项目引用关系说明。
Tag List
Report on various tags found in the code.
项目标签列表,一般是列出Todo类标签的内容。
Test JavaDocs
Test JavaDoc API documentation.
测试项目代码文档。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。