首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

使用Maven构建java项目

作者:董晓光 喻涛 来源:电子技术与软件工程


  摘要本文简单讲述了java项目的构建和应用maven技术对构建带来的便利,并讨论了应用maven作为项目管理的优势,并简要列举了maven的一些技术细节。
  【关键词】maven 构建 仓库
  1 关于构建
  在软件的开发过程中,构建是每一名开发者每天都在重复完成的工作。每天都进行着从最新源码库中下载(签出)代码,进行测试,调试,修复代码。然后才是编写自己负责部分的代码,当测试人员发现新的bug时还需要本地重现,就需要用IDE生成war包,将其部署在WEB容器中,根据错误报告重现bug,修复bug,并再次提交给测试人员测试。
  在这个每天的工作过程中,我们可以总结出,除了编写代码,我们每天花费了相当一部分时间在编译、单元测试、生成文档、打包和部署等不起眼但异常繁琐的工作上,这一系列的工作就是构建,如果一直用手工完成这种工作,成本就太高了,有需求就会有相应的应用,于是构建软件就产生了,这使得构建的过程就如同生产线一样,只需要一些简单的命令,这些繁琐的步骤就能够自动的完成。而本文介绍的maven就是这样一个优秀的构建工具。
  Maven的用途之一就是用于构建项目,它能帮助我们把构建工作自动化,从清理项目、编译、进行测试、还可以生成报告,并能打包和部署项目。使用了maven后,我们可以不用重复的输入命令,一次次的用鼠标操作,我们只需要用maven配置好项目,然后输入一些简单的命令,就能完成原来繁琐的工作。
   如同我们一直在想方设法避免的设计重复、编码重复、文档重复,还有本文讨论的构建的重复。使用maven能消除构建上的重复工作,maven对构建的生命周期进行了抽象,并为许多构建步骤提供了插件,开发者不需要再定义对过程进行定义,甚至可以不用实现过程中的许多任务。
  2 Maven的其它功能
  Maven不仅仅是一个构建工具,它还是一个依赖管理工具与项目信息管理工具。Maven提供了一个仓库,使得开发者能够方便的下载所依赖的jar包。对用java进行开发的开发者来说,在项目的开发过程中,一般都会用到一些开源框架和第三方的工具,这些都是通过jar包的形式引用到项目中的,甚至一些jar包还会依赖于其他jar包,这些被依赖的jar包也需要引入到项目中,这些引入的相关jar包都将作为项目的依赖。很多情况下,一个Java EE项目都会依赖很多的jar包。但是,这还并不是最重要的问题,重点在于这些jar包的管理上,jar包的众多版本才是最令人头疼的问题。在选定一个jar包的版本时,开发者需要考虑这个jar包所依赖的jar包是否能够支持此版本,并且还需要考虑依赖它的jar包可否对兼容此版本。因此,在没有使用maven来构建的项目中,通过繁琐的测试整理出的一大堆能使得项目正常运行起来的jar包之后,项目的lib目录成为了禁区。即使jar包的版本更新了,开发者们也不愿意去自找麻烦去触碰它。对于考虑项目是否存在冗余的jar包只有项目还能运行就不会有人愿意去更新它。一直到Maven的出现,才完美的解决了这一难题。它可以完成对项目所依赖的jar包进行有效的管理,可以让我们的项目保持最基本的依赖,排除冗余jar包,可以让我们轻松的完成对所依赖的jar包进行版本的升级工作。maven支持传递性依赖(transitivedependencies)。假如我们的项目依赖于一个库,而这个库又依赖了几个或者更多其它的库(就如同Hibernate或Spring一样)。我们可以不必找出所有这些依赖然后把它们写入pom.xml里面,我们只需要在pom中加入直接依赖的库,Maven就可以隐式的把那些间接依赖的库也引入到我们的项目中。同时Maven还能够处理这些依赖中可能的冲突,我们还可以定义默认的传播行为,也可以去掉指定的传递性依赖。
  3 Maven的目录结构
  LICENSE.txt此文件中包含了?Maven的软件许可证。
  NOTICE.txt 此文件包含了Maven依赖的类库所需要的权限和通告。
  README.txt 此文件包含了一些安装指令。
  bin/ bin/目录中包含了运行Maven的mvn脚本。
  boot/boot/目录包含了创建Maven运行所需要的类装载器的JAR文件
  conf/ 目录中有一个全局的settings.xml文件,用来自定义Maven的一些行为。
  lib/目录中含有Maven核心的JAR文件。
  4 Maven生命周期
  生命周期是指在构建一个项目时一系列的有序的阶段。Maven能够支持多种不同的生命周期,但是最常见的生命周期还是Maven默认的生命周期,首先是验证项目的基本完整性,最后的阶段是把项目发布成产品。生命周期的阶段被特地留得含糊,单独的定义为验证(validation),测试(testing),或者发布(deployment),而他们对不同项目来说意味着不同的事情。
  插件目标可以附着在生命周期阶段上。随着Maven按着生命周期的阶段移动,它就会执行相应的插件。不同的阶段绑定了数个目标。生命周期就是这些阶段的序列。使用时是某个目标被绑定到某个阶段。每一个绑定的目标随着特定阶段的运行才能启动。
  
  作者单位
  河北科技大学唐山分院河北省唐山市063000