一、为什么需要Maven
添加第三方jar包
在开发中,我们需要的jar包资源会越来越多,jar包的管理会越来越麻烦,并且每次创建新项目的时候都需要重新导入所有需要的jar,或者在不同的项目中保存了多份相同的jar包。
使用Maven后,我们每一种jar包只需要在本地仓库中保存一份,就可以在不同项目中使用这个jar包,需要jar包的工程只需要维护一个文本形式的jar包的引用——我们称之为“坐标”。不仅极大的节约了存储空间,让项目更轻巧,更避免了重复文件太多而造成的混乱 。
jar包之间的依赖关系
往往我们想使用一个jar包时,只导入这一个jar包是行不通的,必须导入这个jar包依赖的相关jar包,最典型的例子是:commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar,如果没有IO包,FileUpload包就不能正常工作。 这样就得导入多个jar包,特别是我们不知道我们想使用的jar包需要依赖什么jar包的时候,就会无从下手,或者运行项目后根据报错中找出相关依赖的jar,再进行添加。这样就很麻烦且极大的降低开发的效率,当我们使用Maven后,我们只需要添加我们想使用的jar包,Maven就会自动帮我们把相关依赖的jar包给下载并添加,极大的提升的效率和便捷。用实际例子来说明就是:通过Maven导入commons-fileupload-1.3.jar后,commons-io-2.0.1.jar会被自动导入,程序员不必了解这个依赖关系。
处理jar包之间的冲突
我们在开发的过程中并不是说把jar包都导进来了就可以正常运行的,在有时候有的项目之间需要互相依赖,但项目里导入的jar版本号并不相同,这就会发生jar包冲突,举个例子:我们现在有三个工程MakeFriend、HelloFriend、和Hello。MakeFriend依赖HelloFriend,HelloFriend依赖Hello。而Hello依赖log4j.1.2.17.jar,HelloFriend依赖log4j.1.2.14.jar。如下图所示:
所以我们在运行MakeFriend项目的时候,到底该导入那个jar包呢?这样的问题一个两个还可以手工解决,但如果系统中存在几十上百的jar包,他们之间的依赖关系会非常复杂,几乎不可能手工实现依赖关系的梳理。 使用Maven就可以自动的处理jar包之间的冲突问题。因为Maven中内置了两条依赖原则:最短路径者优先和先声明者优先,上述问题MakeFriend工程会自动使用log4j.1.2.14.jar。
获取第三方jar包
我们在实际开发中使用到的jar包是很多的,但每个jar包的获取方式又不完全相同,有时候为了找一个需要的jar包而花费了大半天的时间,或者找不到,会让我们无比的头疼。
在使用Maven后,我们可以享受一个完全统一的jar包管理体系。我们只需要项目中以坐标的体系依赖想要的jar包,Maven就会自动帮我们从中央仓库中获取,并同时下载这个jar包所依赖的其他jar包——规范、完整、准确!一次性解决所有问题!
统一的规范几乎可以说成是程序员的最高信仰 !
将项目拆分成多个工程模块
随着JavaEE项目的规模越来越庞大,开发团队的规模也与日俱增。一个项目上千人的团队持续开发很多年对于JavaEE项目来说再正常不过。那么我们想象一下:几百上千的人开发的项目是同一个Web工程。那么架构师、项目经理该如何划分项目的模块、如何分工呢?这么大的项目已经不可能通过package结构来划分模块,必须将项目拆分成多个工程协同开发。多个模块工程中有的是Java工程,有的是Web工程。 那么工程拆分后又如何进行互相调用和访问呢?这就需要用到Maven的依赖管理机制。大家请看我们的Survey调查项目拆分的情况: