我们一起走进Maven——知己知彼

473

我们一起走进Maven——知己知彼

1. 什么是Maven?

乍一看,Maven看起来有很多东西,但简而言之,Maven试图将模式应用于项目的构建基础架构,以便通过提供使用最佳实践的明确路径来提高理解力和生产力。Maven本质上是一个项目管理理解工具,因此提供了一种帮助管理的方法

  • 构建
  • 文档
  • 报告
  • 依赖
  • 供应链管理系统
  • 发布
  • 分配

2.Maven的哲学

Maven通常被许多人认为是构建工具。很多来到Maven的人最初都熟悉Ant,所以它是一个自然的联想,但Maven不仅仅是一个构建工具,而不仅仅是Ant的替代品。Maven与Ant完全不同。Ant只是一个工具箱,而Maven则是关于模式的应用,以实现显示可见性,可重用性,可维护性和可理解性的基础结构。

如果没有这些特征,多个人将很有可能在项目上一起高效地工作。没有可见性,个人不太可能知道另一个人已经完成了什么,因此很有可能有用的代码不会被重用。如果不重用代码,则很难创建可维护的系统。当每个人都在不断努力寻找构成项目的所有这些不同点点的地方时,任何人都很难理解整个项目。因此,您最终会遇到孤岛效应,共享知识的衰退以及团队成员之间相应程度的挫折感。当流程对每个人都不以相同的方式工作时,这是一种自然的影响。

Maven诞生于非常实际的愿望,即以相同的方式在Apache工作。因此,开发人员可以在这些项目之间自由移动,通过了解其中一个项目的工作方式,清楚地了解它们的工作原理。

如果开发人员花时间了解一个项目是如何构建它的,那么当他们转移到下一个项目时,他们就不必再次经历这个过程。同样的想法扩展到测试,生成文档,生成指标和报告,测试和部署。所有项目都具有足够的相同特征,了解Maven试图利用其一般的项目管理方法。在很高的层面上,所有项目都需要构建,测试,打包,记录和部署。当然,上述每个步骤都有无限的变化,但是这种变化仍然发生在明确定义的路径的范围内,而Maven试图以明确的方式向每个人呈现这条路径。明确路径的最简单方法是为人们提供一组模式,这些模式可以由项目中的任何人共享。

拉尔夫·约翰逊唐·罗伯茨在“进化框架模式”中最喜欢的一句话:

人们通过从具体例子中概括出来来发展抽象。在没有实际开发运行系统的情况下,每次尝试在纸上确定正确的抽象都是注定要失败的。没有人那么聪明。框架是一种可重用的设计,因此您可以通过查看它应该是设计的东西来开发它。您看到的示例越多,您的框架就越通用。

我真的不知道最终的结果是什么样的,我只知道必须有更好的方法。但首先我知道我想:

  • 项目的模型,以便您可以在一个地方查找与项目相关的所有内容
  • 一个标准的目录结构,所以你不必去寻找图书馆,资源和文档

3、举例理解

其实上面的都是官方语言,对我这种理解能力不强的人其实举例子更合适:

假如你正在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项目时都会要求写上这三个属性值的。

看完上面这些再看看我绘制的图,估计能理解个八九不离十:

公众号

能欣赏我的文章的话,可以顺便关注一下公众号,彼此欣赏,何必孤独: