Maven——jar包管家
本篇文章会从两方面讲述maven,你只需要读懂这篇文章就可以了解maven并熟练使用maven。这两方面分别为:(1)我们为何使用maven(2)什么是maven以及maven都包括什么
1.我们为何使用maven
假设现在的场景是我们不使用maven编写程序。
(1)如果我们现在编写一个System.out.println("Hello World ! ");那么程序非常简单,只需要在主函数写上这局代码,直接运行就可以在控制台输出Hello World ! 。
(2)程序稍微复杂些了。需要用到一个其它的工具类,并且这个类不是java的预定义类(比如java.util,java.lang等等)。那么我们必须从网上download下来jar包,并把他们放在External Libraries里,然后引入(import)他们,那么我们就可以使用这些工具类了。
(3)程序更复杂一些了,我们需要用到不止一个外部jar包,那么我们需要分别从各种网站上下载我们需要的jar包,并把他们放在External Libraries里,再引入使用。
当我们稍微编写一些复杂的程序的时候,就会出现(3)这种情况,那么我们每次编写程序都要很麻烦地在网上找到jar包并下载他们。那么如果有一个管家可以帮我们做这些事,而我们只需要告诉他jar包的地址就可以,岂不是变得很方便。这个管家就是maven。
2.什么是maven
前边我们说了,maven就是一个帮助我们下载、管理jar包的管家,帮我们省去一些体力活,专注于程序的开发。那么关于maven都有哪些名词呢?
(1)maven软件。既然maven是一个管家,那他一定有一个相应的实体,总不能是空气帮我们下载、管理jar包吧?这个实体就是maven软件。所以在我们的编辑器里是有设置maven的文件目录位置的,告诉编辑器如果建立maven项目的话由谁来当管家。
(2)pom.xml。当我们需要maven管家来下载jar包的时候,我们总需要告诉他这些jar包都是谁吧?pom.xml就是我们交给maven来读的文档,告诉他jar包的位置。我们怎么标识每个我们想要的jar包呢?
如图:
groupId和artifactId以及version唯一标识了我们想要的jar包,maven就可以通过这个唯一的标识找到我们想要的jar包了(具体maven是怎么通过这些标识找到jar包的下一项会说)。这些标签之外的dependency标签意思是依赖,即项目依赖这些jar包。
(3)仓库。三个名词:中央仓库,私人仓库(企业),本地仓库。
maven有一个中央仓库(maven网站),集成了大多数我们所能用到的jar包,这些jar包都有自己的名字id来标识自己。所以maven实际上是来中央仓库根据标识来找到jar包并下载下来(默认地址)。maven将这些jar包下载到本地仓库(用户设置目录,默认目录为C盘用户目录下.m2目录下的repository目录),供项目引用。并且这些jar包一直保存在本地仓库,maven不需要再次下载。而私人仓库一般是企业用来存储jar包,供公司内部直接下载的。(比如阿里巴巴有中央仓库的镜像,我们可以直接在maven的setting.xml文件中设置阿里巴巴的镜像,就可以直接在阿里巴巴的仓库直接寻找jar包。
如图:
所以maven根据pom.xml寻找jar包的顺序:本地仓库——>镜像仓库——>中央仓库。
总结:
(1)maven是一种手段,方便管理jar包。
(2)流程:
当我们新建maven项目时,maven管家根据pom.xml文件中描述的jar包去本地仓库中寻找,如果所要求的jar包本地仓库都有,那么项目可以直接引用。如果本地仓库没有,那么maven继续去中央仓库(或镜像,并且镜像优先级更高)中寻找并下载到本地,供项目引用。
(图片描述有些不太精确。。。。)