文章的开头我希望先引用Wikipedia词条的介绍:

Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven也可被用于构建和管理各种项目,例如C#,Ruby,Scala和其他语言编写的项目。Maven曾是Jakarta项目的子项目,现为由Apache软件基金会主持的独立Apache项目。

Wiki对于Maven的介绍比较精炼,要想真正认识Maven,我们不妨从一个问题开始。

一个问题

在一个正在开发的项目中,项目A依赖了项目B中的部分类,那么这种依赖关系应该如何维系呢?

最简单的方法当然莫过于像初学Java时那样,将B打成jar包,然后A导入B的jar文件,这样就可以调用B中的类了。

使用上述的方法,会出现一些很明显的问题:

  • 若在开发过程中发现了B项目的bug,则需要完成对B项目的debug、重新打包B项目并对A进行重新编译。
  • A项目开发完成后,要保障A的正常运行,则需要依赖B。这里有两种处理方案:一是将B打包入A,这可能造成资源的浪费(开发者可能正在开发依赖B的其它项目,此时B已经存储到本地了,再导入A的jar,就有了两个B的jar)。二是将B也发布出去,告诉开发者想要用A就必须再导入B,这样的结果就是需要麻烦地去找各种jar包,当一个项目的依赖十分复杂时,导入各种jar包都会成为一种灾难。

听过上面的问题,我们应该意识到了认为管理依赖的弊端,作为一名工程师,我们应当很自然地就会思考到:有什么工具能够帮助我们解决这一问题吗?这时,就可以正式引入我们的主角——Maven了。

Maven的作用

Maven到底是什么,能做什么。用通俗的话来说:就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。

Maven仓库

通过pom.xml中的配置,就能够获取到想要的jar包。但是这些jar包是从哪获取,又是存放在本地的什么地方呢?答案是Maven仓库。而Maven仓库又分为:本地仓库、第三方仓库(私服)、中央仓库;

本地仓库

既然是依赖管理工具,那么必然是会将需要的jar包拉到本地来管理,Maven会将工程中依赖的构件(Jar包)从远程下载到本机一个目录下管理,这个目录就是本地仓库。在从网上下载一个拥有相对完整的所有jar包的结合,都丢到本地仓库中,然后每次写项目,直接从本地仓库里拿就行了。

第三方仓库

第三方仓库,又称为内部中心仓库,也称为私服。第三方仓库一般是由公司自己设立的,只为本公司内部共享使用。连接私服需要单独配置。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。
私服可以使用的是局域网,中央仓库必须使用外网。一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。

中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
工程依赖的jar包如果本地仓库没有,默认从中央仓库下载。

Maven坐标

Maven使用下面三个向量子仓库中唯一定位一个 Maven 工程:

节点作用
groupId这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.companyname.project-group 拥有所有的和银行相关的项目。
artifactId这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。

参考资料

参考博文

最后修改:2020 年 09 月 27 日 07 : 15 PM