如何理解Maven,这篇文章帮你解决!

1.Maven是什么?

首先Maven是一个项目管理工具,通过pom.xml文件(下文会介绍)的配置,它可以帮我们去下载jar到指定的仓库,我们就不需要像原来的项目在lib目录下去粘贴我们需要的jar包,这仅仅是他的功能之一。除此之外他还能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成Web站点。接下来通过对比让大家直观感受到Maven的优势。

2.Maven的优势

使用传统Web项目构建的CRM项目如下:
如何理解Maven,这篇文章帮你解决!
同样的项目,如果我们使用Maven工程来构建,会发现总体上工程的大小会少很多。如下图:
如何理解Maven,这篇文章帮你解决!
通过上面两张图的比较我们可以直观的看出Maven工程的文件确实是很小,我们粗布可以判断出Maven工程没有导入我们需要的jar包,那Maven工程所需要的jar包放到哪里了呢,接下来我们一起来探索一下
如何理解Maven,这篇文章帮你解决!
通过分析发现:maven工程中不直接将jar包导入到工程中,而是通过在pom.xml文件中添加所需jar包的坐标,这样就很好的避免了jar直接引入进来,在需要用到jar包的时候,只要查找pom.xml文件,再通过pom.xml文件中的坐标,到一个专门用于”存放jar包的仓库”(maven仓库)中根据坐标从而找到这些jar包,再把这些jar包拿去运行。
那么问题来了
第一:”存放jar包的仓库”长什么样?
第二:通过读取pom.xml 文件中的坐标,再到仓库中找到jar包,会不会很慢?从而导致这种方式不可行!
第一个问题:存放jar包的仓库长什么样,这一点我们后期会分析仓库的分类,也会带大家去看我们的本地的仓库长什么样。
第二个问题:通过pom.xml文件配置要引入的jar包的坐标,再读取坐标并到仓库中加载jar包,这样我们就可以直接使用jar包了,为了解决这个过程中速度慢的问题,maven中也有索引的概念,通过建立索引,可以大大提高加载jar包的速度,使得我们认为jar包基本跟放在本地的工程文件中再读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在maven仓库中有了索引我们就可以认为可以快速找到jar包。

除此之外,Maven还为我们提供了一键构建项目功能。
我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
什么是构建?
指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给maven进行管理,这个过程称为构建。
一键构建
指的是整个构建过程,使用maven一个命令可以轻松完成整个工作。

3. Maven的使用

3.1maven的安装及配置

首先我们需要到官网下载最新的Maven管理工具,下载流程略过…
我们直接进入正题,我们在官网下载后解压后的目录如下:
如何理解Maven,这篇文章帮你解决!
注意:将Maven解压到一个没有中文没有空格的路径下,比如C:\Program Files\my_java下面。
改文件的目录结构如下图:
如何理解Maven,这篇文章帮你解决!
bin:存放了maven的命令,比如我们前面用到的mvn tomcat:run
boot:存放了一些maven本身的引导程序,如类加载器等
conf:存放了maven的一些配置文件,如setting.xml文件(后面经常使用)
lib:存放了maven本身运行所需的一些jar包
至此我们的maven软件就可以使用了,前提是你的电脑上之前已经安装并配置好了JDK。

接下来就是Maven及JDK的配置

使用Maven的前提是你电脑必须要安装java环境(即安装JDK)
我安装的是JDK-12.0.2(JDK版本1.9以上的在使用Maven会出现几个小问题,下一章会为大家指出),如下图:
如何理解Maven,这篇文章帮你解决!

配置 MAVEN_HOME ,变量值就是你的maven安装 的路径(bin目录之前一级目录)
如何理解Maven,这篇文章帮你解决!
上面配置了我们的Maven软件,注意这个目录就是之前你解压maven的压缩文件包在的的目录,最好不要有中文和空格。
这样就完成的Maven软件的安装了。
接下来我们测试一下:
快捷键win+R打开cmd命令,输入mvn –v命令,如下图:
如何理解Maven,这篇文章帮你解决!
我们发现maven的版本,及jdk的版本符合要求,这样我们的maven软件安装就成功了。

3.2Maven仓库

前面我们了解到Maven工程的jar包并不在自己的工程文件里面,它是把这些jar包集中放到一个仓库里面,当我们需要的时候即可从本地仓库取出来。

3.2.1Maven仓库有三种类型

本地仓库 :用来存储从远程仓库或*仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找
默认本地仓库位置在 user.dir/.m2/repository{user.dir}/.m2/repository,{user.dir}表示windows用户目录。

远程仓库(私服):如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内。

*仓库 :在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是*仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

3.2.2Maven本地仓库的配置

默认本地仓库位置在 user.dir/.m2/repository{user.dir}/.m2/repository,{user.dir}表示windows用户目录。
我们也可以通过配置来指定本地仓库的位置
在MAVE_HOME/conf/settings.xml文件中配置本地仓库位置(maven的安装目录下):
如何理解Maven,这篇文章帮你解决!
打开settings.xml文件,配置如下:
如何理解Maven,这篇文章帮你解决!
注意:这里建议大家安装Notepad++的软件,以方便打开.xml文件。

3.2.3全局setting与用户setting

maven仓库地址、私服等配置信息需要在setting.xml文件中配置,分为全局配置和用户配置。
在maven安装目录下的有 conf/setting.xml文件,此setting.xml文件用于maven的所有project项目,它作为maven的全局配置。
如需要个性配置则需要在用户配置中设置,用户配置的setting.xml文件默认的位置在:user.dir/.m2/settings.xml,{user.dir} /.m2/settings.xml目录中,{user.dir} 指windows 中的用户目录。
maven会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

4.Maven的常用命令

4.1.1 compile

compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。

4.1.2 test

test是maven工程的测试命令 mvn test,会执行src/test/java下的单元测试类。

4.1.3 clean

clean是maven工程的清理命令,执行 clean会删除target目录及内容。

4.1.4 package

package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。

4.1.5 install

install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库。

注意:当后面的命令执行时,前面的操作过程也会自动执行。

文章有不当之之处,欢迎指正。