1.Maven是什么?
在刚学maven时,我就把maven当作一个引入jar包的工具而已,以前是自己下载jar包,现在是只用在pom文件中填写相应的坐标就可以了。除此之外当我们需要使用的jar包依赖于另一个jar包时,maven会自动帮我们引入适用的版本。这就避免了我们自己下jar包,然后版本不匹配的问题。除此之外,我还模糊的知道一些maven的聚合和继承,之后在接手项目的时候还是吃了的大亏。于是打算重新学习一下maven。
2.Maven的优势
使用传统Web项目构建的CRM项目如下
同样的项目,如果我们使用Maven工程来构建,会发现总体上工程的大小会少很多。如下图:
通过上面两张图的比较我们可以直观的看出Maven工程的文件确实是很小,我们粗布可以判断出Maven工程没有导入我们需要的jar包,那Maven工程所需要的jar包放到哪里了呢,接下来我们一起来探索一下
通过分析发现: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解压到一个没有中文没有空格的路径下,比如C:\Program Files\my_java下面。
改文件的目录结构如下图:
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_HOME ,变量值就是你的maven安装 的路径(bin目录之前一级目录)
上面配置了我们的Maven软件,注意这个目录就是之前你解压maven的压缩文件包在的的目录,最好不要有中文和空格。
这样就完成的Maven软件的安装了。
接下来我们测试一下:
快捷键win+R打开cmd命令,输入mvn –v命令,如下图:
我们发现maven的版本,及jdk的版本符合要求,这样我们的maven软件安装就成功了。
3.2Maven仓库
仓库可以理解为存放jar包的地方。
仓库的分类
本地仓库:当前电脑上的部署的仓库目录,为当前电脑上的所有Maven工程服务
远程仓库:
(1) 私服: 搭建在局域网环境中,为局域网范围内的所有Maven工程服务
(2) 中央仓库: 架设在Internet上,为全世界范围内所有的Maven工程服务。
(3) 中央仓库镜像: 为了分担中央仓库的流量,提升用户的访问速度。
使用properties标签内自定义标签统一声明版本号
4.Maven的常用命令
4.1.1 compile
compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。
对主程序是否有效:有效
对测试程序是否有效: 有效
是否参与打包: 参与
是否参与部署: 参与
典型例子: Spring-core
4.1.2 test
test是maven工程的测试命令 mvn test,会执行src/test/java下的单元测试类。
对主程序是否有效: 无效
对测试程序是否有效: 有效
是否参与打包: 不参与
是否参与部署: 不参与
典型例子: junit
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包发布到本地仓库。
注意:当后面的命令执行时,前面的操作过程也会自动执行。
5.maven引用本地jar包的几种方式
方式一:build path
方式二、通过maven-install-plugin打包到本地仓库里
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-vim25</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<packaging>jar</packaging>
<groupId>com.vmware</groupId>
<artifactId>vim25</artifactId>
<version>6.5.3</version>
<file>./lib/vim25.jar</file>
</configuration>
</execution>
</executions>
</plugin>
打包之后,可以通过dependency正常引入:
<dependency>
<groupId>com.vmware</groupId>
<artifactId>vim25</artifactId>
<version>6.5.3</version>
</dependency>