1、若没有Maven,会怎么样?
<1> 如果现要开发一个项目,采用SSM框架,那么我们就必须将项目依赖的所有的jar包,依次找出来并手动导入。
<2> 如果同时开发两个项目A和B,B项目需要依赖A,这时就需要先把A打成jar,然后在B中手动导入。
以上所描述的两种情况,若项目依赖关系简单,操作会很简单速度也会比较快,但真实的项目中的依赖关系往往会很复杂,这样手动操作会非常的繁琐;并且在第2种情况中,若A中出现BUG,则将A中的BUG修复后,必须重新手动打包,需要消耗很多的时间以及精力。
2、Maven是什么?
Maven是基于项目对象模型(POM-Project Object Model),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理和理解工具。它是Apache的一个开源的项目。
简单地说,Maven是一个通过POM来描述和管理项目依赖关系的工具,它会根据pom.xml文件中的配置自动地帮我们下载项目所需要的jar包,并将所下载的jar包放到指定的目录。
同时Maven还是一个非常优秀的项目构建工具,那么何为构建呢?构建就是能够帮我们自动化地完成一系列的与编程无关的项目管理工作,包括:下载依赖、清理、编译源码、单元测试、生成文档、打包以及项目部署。
3、Maven的作用
<1> 依赖管理:
通过坐标的方式管理所有的依赖。
<2> 项目构建:
下载依赖、清理、编译源码、单元测试、生成文档、打包以及项目部署。
<3> 项目信息管理:
项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等。
<4> 其他:
Maven可以自动生成站点,以及一些已有的插件;获得项目文档、测试报告、静态分析报告、源码版本日志报告等。
4、Maven官网
5、Maven下载与安装
<1> 访问官网,下载安装包(需注意:Maven安装前要先确认JDK是否安装好)
<2> 将下载的安装包解压到所要安装的目录,其目录结构如下:
bin:包含了mvn运行的脚本,这些脚本用来配置Java命令,准备好classpath和相关的Java系统属性,然后执行Java命令。
boot:该目录中包含一个jar包 plexus-classworlds-2.6.0.jar,plexus-classworlds是一个类加载器框架,相当于Java的类加器。
conf:该目录中包含一个非常重要的配置文件settings.xml,这个文件是Maven的全局配置文件;我们一般更偏向于将此文件复制到~/.M2/目录下,然后修改这个文件,在用户范围内定制Maven的行为。
lib:包含了Maven运行时需要的所有jar包。
其他:LICENSE记录的是Maven使用的软件许可证;NOTICE记录的是Maven包含的第三方软件;README.txt包含了Maven的相关介绍。
<3> 配置环境变量
桌面 -> 计算机 -> 右键属性 -> 高级系统设置 -> 高级 -> 环境变量 -> 新建系统变量MAVEN_HOME,值为:Maven的安装目录(…\apache-maven-3.6.3)
环境变量PATH中添加 ;%MAVEN_HOME%\bin
验证,在命令行中输入 mvn --version,如下图所标,说明配置成功:
需注意: 验证环境变量是否配置成功需要新打开一个cmd窗口,因为新的环境变量配置需要在新的cmd窗口中才能生效。
6、Maven仓库
Maven仓库分为本地仓库和远程仓库。Maven在寻找所需依赖的时候,会首先在本地仓库查找,若能找到,则直接使用;若本地仓库找不到,则会去远程仓库查找,找到所需要的依赖后,下载到本地再使用,若本地仓库和远程仓库都没有所需要的依赖就会报错。
本地仓库是在Maven安装好后,执行第一条Maven命令的时候创建的,默认目录为~/.m2/repository。
远程仓库又分为中央仓库、私服和其他公共库。中央仓库是Maven自带的仓库,默认配置情况下,本地仓库没有所需依赖的时候就会去中央仓库查找。私服是一种架设在局域网内的仓库服务,用于代理网络上的远程仓库,当Maven需要下载依赖时,会请求私服,若私服上存在所需依赖,则会直接下载到本地;若私服上不存在,则会从外网的远程仓库下载,缓存到私服后再为Maven的下载请求提供服务。其他公共仓库,例如阿里的Maven仓库、JBoss Maven库等。