【doc】Maven在企业Java软件产品中的应用
Maven在企业Java软件产品中的应用
ISSN1009-3044
ComputerKnowledgeandTechnology电脑知识与技术
Vo1.7,No.7,March2011,pp.1562—1565,1588
Maven在企业Java软件产品中的应用
李俊杰
(北京邮电大学,北京100876)
E—maihx~l@cccc.net.ell
Te1:+86—55l一56909635690964
摘要:Maven是目前Tava项目的主要项目管理工具,它具有管理方便,容易扩展的
特点.该文简单介绍了Maven的原理,功能和生命
周期等概念,重点结合Maven在网络管理软件产品中的实例应用,分析和总结了
Maven在企业级软件产品中的具体使用.
关键词:Maven;插件;生命周期;网络管理
中图分类号:TP393文献标识码:A文章编号:1009—3044(2011)07—1562—04
ApplyingMaveninDevelopingEnterpriseJavaApplications LIJun-Jie
(BeijingUniversityofPostsandTelecommunications,Beijing100876,China)
Abstract:Mavenisasoftwareprojectmanagementandcomprehensiontoo1.Basedonthecon
ceptofaprojectobjectmodel(POM),
MavencanmanageaprojectSbuild,reportinganddocumentationfromacentralpieceofinfor
mation.ThepaperintroducesthebasicCOn—
ceptsandprincipleofMaven.AndsummarizethebestpracticesforeffectiveMavenmanage
mentinJavaapplicationsofNMS.
Keywords:Maven;plugins;lifecycle;NetworkManagement(NMS) 1Maven简介
Maven是一种Java技术,是Ant的进化,提供了一套软件项目管理的综合性
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
.无论是编译,发布,文档还是团队协作,Maven提
供了必要的抽象,它鼓励重用,并做了除了软件构建以外的许多工作.作为项目管理工具,它包含了一个项目对象模型fPr0jectOb—
jectMode1),一组
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(DependencyManagementSystem),和用来运行定
义在生命周期阶段(phase)中插件(pl1】l1)目标(goaI)的逻辑.当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的
项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件.
Maven的主要目标是使开发人员在最短的时间里有效地理解整个开发过程,因此它实现了:
1)项目构建过程更加容易
Maven针对项目细节进行了封装,使用户并不需要了解底层的结构,就可以轻松构建起整个项目.
21提供统一的项目构建系统
Maven提供统一的构建系统:采用ProjectObjectModel(POM)定义和构建一个项目,并且以插件(Hugins)的方式共享给所有使
用Maven的项目.因此一旦你熟悉了自己之前的某一个Maven项目的构建之后,你也就知道了所有Maven项目的构建,节省了大量
的需要对项目结构了解才能构建的时间.
3)提供有效地项目信息
通过POM信息和项目源码,Maven可以提供大量有用的项目信息.比如:修改代码管理产生的日志文件,代码之间的交叉引用,
邮件列表,项目依赖关系,包含代码覆盖率的
单元
初级会计实务单元训练题天津单元检测卷六年级下册数学单元教学设计框架单元教学设计的基本步骤主题单元教学设计
测试
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
等.当然,基于POM,Maven还可以提供更多的产品标准信息
4)为最佳开发实践提供准则
Maven集合了当前最佳开发实践的准则,并使之更加简便的应用在项目中.例如最常见的单元测试最佳实践要求Maven也提
供协助项目工作流.比如版本管理和问题跟踪.
2Maven的基本功能
Maven的安装和配置不是本文的重点,所以假定你已经对Maven有了一定的了解,并且已经成功的安装了Maven.如果不是,请
首先参考Maven的官方网站(,/)进行前期的准备和学习. 2.1Maven基本结构
Maven的基本元就是项目(Project),任何一个包含有pom.xml文件的目录都是一个项目.一个项目可以依赖其它的项目.一个
项目也可以由多个模块(子项目)构成,Maven在项目之间还提供了继承. Maven的基本结构包括仓库(Repository)和pom.xml.其中仓库包括两种:远程仓库,本地仓库,它们都可以用声明的方式进行配
置.本地仓库的缺省位置为".m2/repository"目录,也可以在settings.xml中进行指定配置.Maven将pom.xml中定义的jar文件从远程
仓库下载到本地仓库,各个应用使用同一个本地仓库的jar,同一个版本的jar只需下载一次,而且避免每个应用都去拷贝jar,仓库
将会帮助开发者在多个项目间共享库.同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提
jl丈稿日期:2011—01—10
作者简介:李俊杰(1981-),男,内蒙g-A.,硕士研究生,研究方向为网络管理与通信软件.
1562*软件设计开发.本栏目责任编辑谢媛媛
第7卷第7期(2011年3月)
供,在执行maven任务时,会自动下载需要的插件.
每个项目也可以自己构建制品,然后部署到远程仓库中
2.2Maven生命周期
Maven的中心概念就是构建生命周期.有三种内建的构建生命周期:default, clean和site.defauh周期处理你的项目分发,clean周期处理项目的清理.而site周 期处理你的项目节点的文档建立.每一个构建生命周期分为不同的构建阶段,这些 构建阶段表现生命周期的一个执行过程.表1列举了default周期的主要构造阶段.
这些阶段在完成default周期的过程中顺序执行,其中有些阶段会因为项目不需要 而省略.在Maven插件开发中要参照这些阶段安排插件的执行顺序.
3Maven在软件产品中的应用
本节以我们要开发一个网管软件产品为例,产品名称为GNMP,包含
两个子模块BASE和KERNEL,产品结构如图2.
3.1产品版本管理
首先在项目的根目录对象模型(\gnmp\pom.xm1)中定义项目的基本
信息和产品版本信息:
<gmupld>com.study.oam</groapld> <artifaetld>gnmp</artifaetld> <vemion>O.1.0</version> <paekaging>pom</packaging> <name>GNMP</name>
<description>StudyMaven</descripti0n> <inceptionYear>2010</ineeptionYear> 也可以在其中定义更多的项目信息,如开发机构,开发人员,邮件列表等:
<url>-??<ItIrl>
<licenses>-??</licenses> <organization>??</organization> <developers>??-</developers> <contributors>…</contributors>
<issueManagement>'?'</issueManagement> <eiManagement>?</eiManagement> <mailingLists>'??</mailingLists> <sem>??.</scm>
定义该产品包含的模块:
<modules>
<module>base</module>
<module>kemel</module>
</modules>
ComputerKnowledgeandTechno~gy电脑知识与技术
'………一/
图1Mavert原理图
表1default周期的主要构造阶段
i…,……一
"m
.
qI?M'"
0kernel;0px?j
—,,,一,,一—i
图2产品结构
然后在这两个模块的对象模型(pom.xm1)中定义各自的项目基本信息,并且设置父模型为gnmp,则模块的版本和其他基本信息
继承自父模型中的对应内容.以base为例(\gnmp~base\pom.xm1): <groupld>eom.study.oam.gnmp</groupld>
<artifacOd>base</artifactId> <packaging>jar</paekaging> <parent>
<groupld>com.study.oam</groupld>. <artifaetld>gnmp</artifaetId> <ve~ion>0.1.0</ve~ion> <relativePath>../pom.xml</relativePath>
</parent>
3.2产品插件依赖管理
可以在gnmp对象模型中定义全局的依赖管理,规定项目整体使用的第三方依赖及其版本:
<dependeneyManagement>
<dependencies>
<dependency>
<groupld>org.apache</groupld>
<artifaetld>lognj</artifaetld> 本栏目责压编辑:l9媛媛;*软件设计开发1563
ComputerKnowledgeandTechnology电脑知识与技术第7卷第7期(2011年3月) <version>1.2.15</version> </dependency>
<dependency>
<groupId>org</groupId> <artifactld>junit</artifactId> <version>3.8.2.v200706111738<hersion> </dependency>
</dependencies>
</dependencyManagement>
在模块实现中只需要定义直接依赖的插件名称,无需指定版本,实现插件的统一管理.仍以base为例
<dependeneies>
<dependency>
<groupld>org.apache</groupId> <artifactld>log4j</artifactId> </dependency>
<dependency>
<'groupld>org</groupld> <artifactld>junit</artifactld> </dependency>
<dependencies>
3.3产品编译
在项目对象模型中可以定义需要的属性,如我们可以定义全局Java版本为1.5,并设定为编译环境:
<propertms>
(iavfl—version>1.5</java—version>
</properties>
<build>
<plugins>
<plugin>
<groupld>org.apache.maven.plugins</groupId>
<artifactld>maven-compiler—plugin</artifactId> <configuration>
<source>${java-version}</source> <target>${java-version}</target> </configuration>
</plugin>
<plugins>
<build>
3.4单元测试
Mv.内建了对单元测试的支持,测试是Maven默认生命周期的一部分.在
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
目录下的"src/test/java/"中创建单元测试类,继
承Junit定义的TestCase类,并遵从JUnit测试管理模式:一个构造函数接受一个单独的String参数并调用父类的构造函数;一系列
以"test"开头的公有方法,作为单元测试被调用.
对于测试的运行,我们也可以添加测试范围依赖.测试范闱依赖是只有在测试编泽和测试运行时在classpath中有效的依赖.在
项打包阶段.测试范围依赖也不会包含在项目的打包输廿;巾.
以base项目为例,加入对JUnit的测试依赖:
<groupld>com.study.oam.gnmp</groupld> <artifactld>base</artifactId> <packaging>jar</packaging> <dependeneies>
<dependency>
<groupld>org</groupld> <artifactId>iunit<,artifactId> <scope>test<,scope>
</dependency>
<,deDendencies>
对于某些时候或者某些工程,你可能希望在生命周期中跳过单元测试阶段,例如仅仅想要打包生成jar文件,而不去修复单元
1564软件设计开发.;**本栏目责任编辑:谢媛媛
第7卷第7期(2011年3月)
测试.则需要用到Surefire插件,以kernel为例
<groupId>com.study.oam.gnmp</groupld>
<arti~ctld>kemel</artifactld> <packaging>jar</packaging> Compu~rKnowledgeandTechnology电脑知识与技术
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactld>maven—surefire-plugin</artifactId>
<configur~ion>
<skip>true</skip> </configuration>
<plugin>
</plugins>
</build>
3.5项目报告
Maven的Site生命周期阶段可以生成项目的报告,它包含了项目基本信息,依赖,相关开发人员信息,单元测试结果等.其中单
元测试代码覆盖率Clover报告是最常用,并且需要额外设置和定制的. 首先在default和site生命周期中加入clover插件,并设定相关参数,具体如下: <!一首先设定一些所需的属性值一>
<properties>
<clover.1icense.path/>
<clover.generateHtml>true</elover.generateHtml> <clover.generatePdf>false</clover.generatePdf> <clover.generateXml>true</clover.generateXml> </properties>
<!一在default生命周期中设置clover插件,用于运行测试后生成数据一>
<build>
<plugins>
<plugin>
<groupld>org.apache.maven.plugins</groupId> <artifaetId>maven-clover-plugin</artifaetId> <version>2.5.1一SNAPSH0T</version>
<configuration>
<licenseL0cati0n>$fclover.1icense.path}</licenseLocation>
(idk>1.5</jdk>
</configuration>
<executions>
<execution>
<id>test</id>
<phase>package</phase>
<goals>
<goal>instrument<|鬯oal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!一在site生命周期中设置clover插件,用于生成报告一>
<repomng>
<plugins>?
<plugin>
<groupld>org.apache.maven.plugins</groupId>
<artifaetld>maven-elover-plugin</artifactld>
<configuration>
<generateHtml>${clover.generateHtml}</generateHtml>
本栏目责任编辑:谢媛媛
(下转第1588页)
;*
软件设计开发1565
Compu~rKnowledgeandTechnology电脑知识j技术第7卷第7期(2011年3月) 键代码(语句,单词等),评分时,系统通过查找考生程序中这些关键代码的数量,给出一个比较合理的分数.
C语言程序书写格式多种多样,同一段程序可以用不同有的风格书写.程序中定义的变量名也随考生个人喜好有所不同,而且
B写时会出现有无空格之类的区别,同样功能的程序编写方法千变万化.直接使用字符匹配方法显然存在很大的不合理性.经过对
C程序语法等特性的研究,在自动评阅方法中采用正则表达式来表示一程序中的关键算法,例如实现1_lO的整数求和程序段的通
用式可表示为:
int@VAR@;for(int@VAR@=l;@VAR@<=10;@VAR@++)@VAR@=@VAR@+
@VAR@;
这种形式可以表示上述程序的核心算法,而H具有通片1性
3结束语
基于上述C语言程序设计题自动评阅方法的C语言考试系统已应用于实际教学和教学辅助网站.经过大量测试和使用,程序
没汁题的自动评分可全部实现.对于正确的考生程序,能100%的准确评分,对于存在错误的考生程序,评分结果接近人工评分标
准,准确率在90%左右,避免了不合理极端分数的出现,完全aj'以在实际考试中使用.
此C语言程序设计题自动评阅方法,也可应用各种将C语占列入考试科目的各类
计算机考试,如全国计算机等级考试:级,j
绒C语言上机,省二级C语言考试和国家程序员考试等,具有很好的应用和推广价
值.
参考文献:
…黄思先.程序设计填空题的自动评分福建电脑,2003(7):26,27
【21段汉周,凌捷,郑衍衡.VisualBasic程序设计考核自动评阅系统中若干问题的
研究lJ】.计算机工程,2001,27(4)167—168.
I31吴晓辉.VFP表单计算机阅卷系统【J】.福州大学:自然科学版,2001,29(t~刊)91
—94.
何克抗.许骏.计算机辅助测评(CAA)研究新进展一技能性非客观题的自动测评
【J1.开放教育研究2005(2):78—83.
I51春霞.自动阅卷系统的开发?.盐城工学院:自然科学版,2002(1):47—49
l16JJoyM,LuckM.TheBOSSSystemforOn—
lineSubmissionandAssessment[J].JournaloftheCTICentreforComputing,l998(10):27-2
9.
I7lijI;晨辉,陈玉泉,徐良贤.基于题目反应理论的机助F1适应考试系统IJ1.计算机
工程,2000(11):161—163.
18】CHENJ,SubramaniamS.Specification—
basedTestingforGUl-basedApplications[J].SoftwareQualityJournal,2002(10):204—
224.
191AjiroY,KimaKU.AnAutomatedErrorCorrectionSystemfol'ConcurrentLogicProgra
ms【J1.AutomatedSoftwareEngineering.2002(9): 67-94.
I101马航飞.基于B/s模式的在线考试系统ASP实现方案lJ1.中国两部科
技,2005(11):15—16.
(一L接第1565页)
<generatePdf>${clover.generatePdf}</generatePdf>. <generatexml>${clover.generateXml}</generateXml> <licenseLocation>${clover.1icense.path}</lieenseLocation>
</configuration>
</plugin>
</plugins>'
</reporting>
4结束语
本文简单介绍了Maven这种项目管理工具,并通过在软件产品中的应用分析了Maven插件的具体使用方法.Maven的设计目
的是简化项目开发工程中各阶段的管理,它功能强大,扩展灵活的特点使它具有大量的插件,也提供了方便研发人员针对自己的不
川项目开发Maven插件的接口.
参考文献:
lllMaven官方网站[EB/OL].. 12]vanZylJ,CaseyJ,MassolV,eta1.BetterBuildswithMaven[M].Mergere,Inc,2006.
3MassolV,OBrienTM.Maven:ADeveloperSNotebook[M].OReily,2005.
1588**软件设计开发j-本栏目责任编辑谢媛媛