毫无疑问,问题是技术进步的巨大驱动力,当我们公司在项目管理过程中出现各种问题时,便有了使用maven来统一管理项目的需求.于是我开始找这方面的资料,但是找了一圈,发现国内真正在项目中使用过maven的人还真不多,大都也就是看了一下Getting Started in 5 Minutes什么的,没有多大实践意义.这也是我想写点关于maven的东西的原因,看能否为maven在国内的使用作一下推广.本文是我第一篇在csdn上的文章,就先从我的实践过程的体会来简单介绍一下maven吧.
记得在开发理赔项目时,项目管理中最烦的问题首先是经常要更换第三方依赖包,这时,更换包的开发人员不得不把这个包用飞鸽发给其它所有的小组成员,然后其它所有的成员再去把原来包的覆盖,如果当那个成员刚好很忙,那么他就很有可能先把这个包放在一边,先继续做他的事,等他做完他的事情后,他可能早已把换包的事情忘了,于是乎,在他起动应用服务器的时候就出现错误了,然后闷着头找了半天没找到原因,问下别人,才知道换了包.这种情况屡见不鲜.影响了开发效率.而且换了几包后,谁也搞不清,现在使用的包的版本号到底是多少了,依赖包因此混乱不堪.
Maven为此提供了解决方案,Maven将所有的项目视作artifact(人造物品,尤指原始工具--金山词霸),由个artifact由groupId,artifactId和version(版本)来唯一定义.maven有个官方的中央依赖库,按groupId,artifactId,version有序地存放着几乎所有常用的开源项目.当然,其更新速度有时还跟不上.这也是maven不够成熟的地方之一.在此不得不先提一下pom.xml文件,每件由maven来管理的项目都有一个pom.xml文件,开发者通过配置此文件来管理项目,例如,当要为项目添加一个依赖包时,可以在pom.xml文件里添加如下配置:
...
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
...
这样,maven就把junit-3.8.1.jar这个包依赖进来了(如同你在eclipse中把这个包加到classpath中一样).在本文我还不想太仔细地讲如何来具体做这些事,只是介绍一下maven有这个功能.那么,开发者只要把这个pom.xml文件也上传到CVS(等)上,其他成员就可以更新到这个文件,只要这个文件更新了,项目的依赖包也就更新了,是不是很方便,很可靠啊?
一个项目从设计到开发以及到使用,必然会产生大量的文档以及项目整个过程的相关信息.maven为我们提供了方便快捷的途径来做这些事情.使用maven为项目生成一个网站,通过配置这个网站的信息就可以把项目的各种文件,信息发布出来了,让开发者和使用者可以通过这个站点来交互,让用户及时了解项目进程,下载相关培训文档等等,其实,只要我们留意一下就可以发现,国外很多开源项目现在都是在使用maven来管理项目的,如spring就是如此,大家可以打开spring的官网(http://www.springframework.org/),其风格就是典型的maven生成的站点.当然,如果大家再留意一下从官网上下载的spring的项目,打开项目的目录,就可以看到pom.xml文件,这是maven的身份证.
目前本人使用maven的第三大功能是项目的打包与发布.这点maven本身是提供了很简单的方法的,起码比ant要简单很多,如果你的项目最终只有简单的一个war包项一个jar包.但是对于j2ee的开发者来说,这个就不那么简单了.
因为项目可能要打成多个包,可能还有ejb什么的,这要能涉及到用maven金项目的方法来管理,或者是单项目生成多包的配置,这些比较烦,一直到现在还在烦我.可以说maven对于这个的支持不是很好,但无论如何,它确实能做这些事,只是实现的方法可能因人而异,最近找了本书,也是全英文的,还没怎么看,看得有点晕,还好,拼拼凑凑总算把公司项目的实现的需求做到了,打成三个包.两个jar包和一个war包,项目也由原来的一个项目分成了由三个子项目构成的多项目.(由于是分布式的项目).
很多人都要把maven跟ant比一比,在此我也想谈谈我的体会,ant短小精干,maven功能强大,能ant 所不能,ant应用灵活,maven为了对项目进行规范化统一管理,必定有条条框框,死板一点.
还有一点,maven就像eclipse一样,它本身功能有限,但它可以有自已的maven插件,通过不同的插件来扩展自身的功能.如果有需要,你也可以自已开发maven插件.上面所说的三大功能,也是maven通过各种插件来实现的
在此就先谈这些了,各位有兴趣使用maven来管理项目的连接到这些地方看看:
maven 官网:http://maven.apache.org
通过"Maven Users List" <users@maven.apache.org>认识的北京的一位朋友jiang sha的blog:http://www.blogjava.net/jiangshachina/ 国内对maven较熟的一位朋友.