Maven的概念
Maven是什么
Maven是一个项目构建管理工具。
Maven是项目进行模型抽象,充分运用的面向对象的思想, Maven可以通过- -小段描述信息来管理项目的构建,报告和文档的软件项目管理I具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。
人话:有了maven之后不管是git还是svn都不要再提交jar包,可以大大的减少项目库的大小。只需要提交pom.xml和代码即可,其他人也可以通过maven下载到一模一样的jar包。
Maven的作用
1、maven对项目的第三方构件(jar包)进行统一管理。向工程中加入ar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中。
2、maven提供一套对项目生命周期管理的标准,开发人员和测试人员统一使用maven进行项目构建。
3、项目生命周期管理:编译、测试、打包、部署、运行。
4、maven对工程分模块构建,提高开发效率。
Maven的概念模型
1、项目对象模型(Project Object Model)。 POM对象模型,每个maven工程中都有一 -个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式。
2、依赖管理系统(基础核心)。maven通过坐标对项目工程所依赖的jar包统一 规范管理。
3、maven定义一套项目生命周期。清理、初始化、编译、测试、报告、打包、部署、站点生成。
4、一组标准集合。maven工程有自己标准的工程目录结构、定义坐标有标准。
5、maven管理项目生命周期过程都是基于插件完成的,例如:开发中使用的tomcat插件。
Maven的仓库
本地仓库:
相当于缓存,工程第一次会从远程仓库 (互联网)去下载jar包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。
中央仓库:
就是远程仓库,仓库中jar由专业团队( maven团队)统一维护。中央仓库的地址: http://repo1.maven.org/maven2/
远程仓库:
在公司内部架设一台私服 ,其它公司架设一台仓库 ,对外公开。国内有阿里

Maven的安装与配置
下载
官方地址:https://maven.apache.org/download.cgi,下载zip包

安装
直接解压即可。

配置环境变量
配置MAVEN_HOME:

添加到Path:%MAVEN_HOME%\bin;

测试是否配置正确:
命令行输入:mvn -version

修改本地仓库的位置
打开maven安装目录中conf里的setting.xml文件,找到: <localRepository>标签
新建一个repository文件夹(我就直接建在Maven的安装目录),修改路径为此文件夹路径,注意路径中不要有中文,不要有特殊符号。

修改IDEA的Maven配置
修改Maven主路径,用户配置文件,本地仓库

添加JVM参数 -DarchetypeCatalog=local,如果不添加此参数,IDEA联网下骨架出问题就会卡死。

新建Maven项目
新建SE项目
IDEA--new project--maven--使用骨架创建项目,用org.apache.maven.archetype.quickStart

GroupId:组织名,公司名
ArtifactID:项目名
Version:版本号
新建web项目


选择Maven的路径和仓库

maven的规范
蓝色是写源码的
绿色是写测试的
红色是目标class
maven的目录结构
maven的目录结构是固定格式

Maven生命周期命令
Maven的生命周期
Maven拥有三套相互独立的生命周期,它们分别为clean,default和site。

Clean生命周期(Clean Lifecycle)
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。Clean生命周期一共包含了三个阶段:
- pre-clean 执行一些需要在clean之前完成的工作
- clean 移除所有上一次构建生成的文件
- post-clean 执行一些需要在clean之后立刻完成的工作
Default生命周期(Default Lifecycle)
Default Lifecycle是构建的核心部分,编译,测试,打包,部署等等,Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。
一些比较重要和常用的阶段:
- compile 编译项目的源代码
- install 将包安装至本地仓库,以让其它项目依赖。
- deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
- process-test-resources 复制并处理资源文件,至目标测试目录
- process-resources 复制并处理资源文件,至目标目录,准备打包
- test-compile 编译测试源代码
- test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
- package 接受编译好的代码,打包成可发布的格式,如 JAR
Site生命周期(Site Lifecycle)
Site Lifecycle 生成项目报告,站点,发布站点,站点的文档(站点信息,依赖..)。Site生命周期,生成站点信息四个阶段:
- pre-site 执行一些需要在生成站点文档之前完成的工作
- site 生成项目的站点文档
- post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
Maven的常见命令
clean
clean是maven工程的清理命令,执行 clean会删除target目录及内容。
compile
compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。
cmd进入命令状态,执行mvn compile,如下图提示成功:
test
test是maven工程的测试命令 mvn test,会执行src/test/java下的单元测试类。
package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。
install
install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库。
从运行结果中,可以看出: 当后面的命令执行时,前面的操作过程也都会自动执行。
Maven的插件
开发中基本不会使用maven插件
导入依赖
Maven依赖
导入依赖坐标,无需手动导入jar包就可以引入jar。在pom.xmI中使用<dependency>标签引入依赖。

Maven中央仓库:
依赖范围
依赖的jar默认情况可以在任何地方可用,可以通过`scope`标签设定其作用范围
这里的范围主要是指以下三种范围
(1)主程序范围有效(src/main目录范围内)
(2)测试程序范围内有效(src/test目录范围内)
(3)是否参与打包(package指令范围内)
此外:`scope`标签的取值有四种:`compile,test,provided,runtime`
