Welcome

首页 / 软件开发 / 数据结构与算法 / 通向架构师的道路 第十九天 使用maven构建Spring工程

通向架构师的道路 第十九天 使用maven构建Spring工程2013-02-18 csdn lifetragedy一、前言

上次大家拿了我上传的工程后,有些人自己通过spring3,struts1.3,hibernate3的download的包自行去装配jar包到工程的WEB-INFlib目录下。有些是通过我上传的alpha_lib包把里面的jar文件一股脑的copy到了工程的WEB-INFlib目录下去。

有时经常还会发生少包了,ClassNotFound这样的错误,或者是一些因为缺包还引起的各种莫名奇妙的错误,呵呵,是不是够折腾的啊?

尝过苦头了,才知道幸苦!那么我们有没有一种更好的方式,比如说:

我下了博主的工程,打一条命令或者是在eclipse里build一下,这个工程需要的jar文件自动跑到我的工程里呢?

有的!这就是maven!!!

因此今天就要讲利用maven来构建我们的工程以及如何在eclipse里跑由maven构建出的web工程(网上这方面资料不全,因此个人总结了经验一并分享给了大家)。

二、传统构建与使用maven构建

传统模式:

《第十八》天中的这个工程的构建就是一个标准的传统模式的构建,为大多数人所接受。

它把所有的jar文件都摆放在工程的WEB-INFlib目录下并使用ant来打包和发布. 这样做的好处是简单、直观、明了。坏处是:构建该工程的人除非很有经验,否则就会出现因为少jar文件或者因为jar文件重复而在布署或者是在运行时引起各种各样的稀奇古怪的错误。

有甚者喜欢把一个下载的spring3.1和struts1.3下载包里的的lib目录下所有的jar不管三七二十一全部copy到工程的WEB-INFlib目录下,有提示需要覆盖他也就选个“ALL”。

我曾看到过一个工程,没几个JSP,CLASS,工程达287mb之大,其中286mb为jar文件,彼彼皆是log4j-1.3.8.jar,log4j-1.4.2.jar这样的重复的jar文件的存在。

有了junit3.8竟然还发觉工程里有junit4.x的包。。。晕啊。

MAVEN模式:

而使用maven构建工程时就不太会有这样的事情发生了,大家初学者可以把maven看成是一个“自动取包机”。怎么解释呢,举个例子来说:

你要装载a.jar,但a.jar依赖b.jar,而b.jar又依赖c.jar和d.jar,如果只是2,3级的依赖关系构建者可以记得住,但如果这个依赖关系达6级,7级以上时那么按照传统的构建模式当你发觉一个目录里有abcdefghijk这些个jar文件时,你一般为了避免出错总是一古脑的把所有的jar文件copy进工程,对吧?

但实际这些个jar文件里只有a.jar,b.jar, c.jar才是你需要的。

而maven干这个是它的特长,当你告诉maven你要下载a.jar文件时,它会发觉a.jar依赖于其它的jar文件,它就会把你指定的jar文件与相关的依赖文件全部拿下来,不会多拿(90%情况下)。

就好比你要拿org.springframework.web.struts-3.0.0.RELEASE.jar这个文件,但其实它还需要用到asm,collection, bean-util等,那么你只要告诉maven我要拿org.springframework.web.struts-3.0.0.RELEASE.jar这个文件,其它的依赖的相关的jar包会自动“下载”到你的工程中去.所以当我拿 maven重新去构建那个286mb的工程时,工程所有的功能一点不影响,靠着maven对jar包的自动依赖整个工程从286mb缩成了21mb,哈哈哈哈。。。。。。搞毛啊原来的那帮人在!

三、使用Maven

3.1 使用前的准备步骤

准备步骤一:

请下载最新的maven2,如:apache-maven-3.0.3-bin.tar.gz(我现在使用的就是这个版本),我也放到我的CSDN的“资源”中去了.

准备步骤二:

确保你的eclipse为WTP版并且升级了mavenfor eclipse,即在你的eclipse->window->preference里有maven的选项:

最好的办法就是去eclipse的官网下载一个eclipsewtp版(http://download.eclipse.org/webtools/downloads/),然后升级,可能升级过程会比较长,5-6小时也是有可能的(笔者家里的网速是20MB光纤)。但是第一次升完级后,以后每周没事就让你的eclipse去update一下也是有必要的,必经这东西是你以后吃饭的家伙,维持它永远是最新版本是个好习惯。