1. 什么是Maven?
乍一看,Maven看起来有不少东西,但简而言之,Maven试图将模式应用于项目的构建基础架构,以便经过提供使用最佳实践的明确路径来提升理解力和生产力。Maven本质上是一个项目管理和理解工具,所以提供了一种帮助管理的方法:java
构建web
文档架构
报告框架
依赖maven
供应链管理系统ide
发布工具
分配性能
2.Maven的哲学
Maven一般被许多人认为是构建工具。不少来到Maven的人最初都熟悉Ant,因此它是一个天然的联想,但Maven不只仅是一个构建工具,而不只仅是Ant的替代品。Maven与Ant彻底不一样。Ant只是一个工具箱,而Maven则是关于模式的应用,以实现显示可见性,可重用性,可维护性和可理解性的基础结构。测试
若是没有这些特征,多我的将颇有可能在项目上一块儿高效地工做。没有可见性,我的不太可能知道另外一我的已经完成了什么,所以颇有可能有用的代码不会被重用。若是不重用代码,则很难建立可维护的系统。当每一个人都在不断努力寻找构成项目的全部这些不一样点点的地方时,任何人都很难理解整个项目。所以,您最终会遇到孤岛效应,共享知识的衰退以及团队成员之间相应程度的挫折感。当流程对每一个人都不以相同的方式工做时,这是一种天然的影响。设计
Maven诞生于很是实际的愿望,即以相同的方式在Apache工做。所以,开发人员能够在这些项目之间自由移动,经过了解其中一个项目的工做方式,清楚地了解它们的工做原理。
若是开发人员花时间了解一个项目是如何构建它的,那么当他们转移到下一个项目时,他们就没必要再次经历这个过程。一样的想法扩展到测试,生成文档,生成指标和报告,测试和部署。全部项目都具备足够的相同特征,了解Maven试图利用其通常的项目管理方法。在很高的层面上,全部项目都须要构建,测试,打包,记录和部署。固然,上述每一个步骤都有无限的变化,可是这种变化仍然发生在明肯定义的路径的范围内,而Maven试图以明确的方式向每一个人呈现这条路径。明确路径的最简单方法是为人们提供一组模式,这些模式能够由项目中的任何人共享。
拉尔夫·约翰逊和唐·罗伯茨在“进化框架模式”中最喜欢的一句话:
人们经过从具体例子中归纳出来来发展抽象。在没有实际开发运行系统的状况下,每次尝试在纸上肯定正确的抽象都是注定要失败的。没有人那么聪明。框架是一种可重用的设计,所以您能够经过查看它应该是设计的东西来开发它。您看到的示例越多,您的框架就越通用。
我真的不知道最终的结果是什么样的,我只知道必须有更好的方法。但首先我知道我想:
项目的模型,以便您能够在一个地方查找与项目相关的全部内容
一个标准的目录结构,因此你没必要去寻找图书馆,资源和文档
三、举例理解
其实上面的都是官方语言,对我这种理解能力不强的人其实举例子更合适:
假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?
很简单,这不就是跟咱们以前写程序时同样吗,须要用哪一个项目中的哪些类,也就是用别人写好了的功能代码,导入jar包便可。因此这里也如此,能够将B项目打成jar包,而后在A项目的Library下导入B的jar文件,这样,A项目就能够调用B项目中的某些类了。
这样作有几种缺陷,若是在开发过程当中,发现B中的bug,则必须将B项目修改好,并从新将B打包并对A项目进行重编译操做,在完成A项目的开发后,为了保证A的正常运行,就须要依赖B(就像在使用某个jar包时必须依赖另一个jar同样),两种解决方案,第一种,选择将B打包入A中,第二种,将B也发布出去,等别人须要用A时,告诉开发者,想要用A就必须在导入Bjar包。两个都很麻烦,前者可能形成资源的浪费(好比,开发者可能正在开发依赖B的其它项目,B已经存储到本地了,在导入A的jar包的话,就有了两个B的jar),后者是咱们常遇到的,找各类jar包,很是麻烦(有了maven就不同了)
咱们开发一个项目,或者作一个小demo,好比用SSH框架,那么咱们就必须将SSH框架所用的几十个依赖的jar包依次找出来并手动导入,超级繁琐。
上面两个问题的描述,其实都属于项目与项目之间依赖的问题[A项目使用SSH的全部jar,就说A项目依赖SSH],人为手动的去解决,很繁琐,也不方便,因此使用maven来帮咱们管理
Maven的核心功能即是合理叙述项目间的依赖关系,通俗点讲,就是经过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来讲,就有些熟悉了,怎么经过pom.xml的配置就能够获取到jar包呢?pom.xml配置文件从何而来?等等相似问题咱们须要搞清楚,若是须要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目能够这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目仍是java项目,web项目仍是web项目,可是包裹了maven以后,就可使用maven提供的一些功能了(经过pom.xml添加jar包)。
因此,根据上一段的描述,咱们最终的目的就是学会如何在pom.xml中配置获取到咱们想要的jar包,在此以前咱们就必须了解如何建立maven项目,maven项目的结构是怎样,与普通java,web项目的区别在哪里,还有如何配置pom.xml获取到对应的jar包等等
pom.xml获取junit的jar包的编写
为何经过groupId、artifactId、version三个属性就能定位一个jar包?
加入上面的pom.xml文件属于A项目,那么A项目确定是一个maven项目,经过上面这三个属性可以找到junit对应版本的jar包,那么junit项目确定也是一个maven项目,junit的maven项目中的pom.xml文件就会有三个标识符,好比像下图这样,而后别的maven项目就能经过这三个属性来找到junit项目的jar包了。因此,在每一个建立的maven项目时都会要求写上这三个属性值的。
看完上面这些再看看我绘制的图,估计能理解个八九不离十: