一、前言
上次大家拿了我上传的工程后,有些人自己通过spring3,struts1.3,hibernate3的download的包自行去装配jar包到工程的 WEB-INF\lib目录下。有些是通过我上传的alpha_lib包把里面的jar文件一股脑的copy到了工程的WEB-INF\lib目录下去。
有时经常还会发生少包了,ClassNotFound这样的错误,或者是一些因为缺包还引起的各种莫名奇妙的错误,呵呵,是不是够 折腾的啊?
尝过苦头了,才知道幸苦!那么我们有没有一种更好的方式,比如说:
我下了博主的工程,打一条命 令或者是在eclipse里build一下,这个工程需要的jar文件自动跑到我的工程里呢?
有的!这就是maven!!!
因 此今天就要讲利用maven来构建我们的工程以及如何在eclipse里跑由maven构建出的web工程(网上这方面资料不全,因此个人总 结了经验一并分享给了大家)。
二、传统构建与使用maven构建
传统模式:
《第十八》天中的这个工程的 构建就是一个标准的传统模式的构建,为大多数人所接受。
它把所有的jar文件都摆放在工程的WEB-INF\lib目录下并使用ant来打包和发布. 这样做的好处是简单、直观、明了。坏处是 :构建该工程的人除非很有经验,否则就会出现因为少jar文件或者因为jar文件重复而在布署或者是在运行时引起各种各样的稀 奇古怪的错误。
有甚者喜欢把一个下载的spring3.1和struts1.3下载包里的的lib目录下所有的jar不管三七二十一全部copy到工程的WEB- INF\lib目录下,有提示需要覆盖他也就选个“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一下也是有必要的,必经这东西是你以后吃饭的家伙,维持它永远是最新版本是个好习惯。