Maven官网
Maven搜索库
一.Maven简介
maven是一个Apache下的一个纯Java开发的开源项目
定义:
Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的工具。
(1)Maven能解决什么问题:
通俗的讲:我们知道,项目开发不就仅仅是写写代码而已,期间会伴随着各种比不可少的事情要做,下面列举几个例子:
- 我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的jar包冲突,版本冲突。
- 我们写好的java文件,需要通过javac编译成class文件才能交给JVM运行。这项工作可以由各种集成开发工具帮我们完成 Eclipse、IDEA 等都可以将代码即时编译。
- 世界上没有不存在 bug 的代码,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
- 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,进行打包。如果是 web 项目,还需要将之发布到服务器 。
如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会用吗? Maven 就可以解决上面所提到的这些问题。
(2)Maven的两个核心功能
依赖管理:
* 传统的 WEB 工程中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。
* maven的 WEB 工程中不直接将jar包导入到工程中,而是通过在 pom.xml 文件中添加所需jar包的坐标。项目运行时,通过读取坐标到一个专门用于“存放jar包仓库"(Maven仓库)找到相应的jar包。
仓库如何存放jar包?
(3)项目构建:

二.Maven安装和使用
(1)Maven下载和安装
下载:
Maven官网下载地址 :http://maven.apache.org/download.cgi
安装:
Maven使用java语言开发的,解压即可运行
注意:maven依赖 JAVA_HOME
目录:
* bin :存放了 maven 的命令,比如我们前面用到的 mvn tomcat7:run* boot :存放了一些 maven 本身的引导程序,如类加载器等* conf :存放了 maven 的一些配置文件,如 setting.xml 文件* lib :存放了 maven 本身运行所需的一些 jar 包


jdk环境变量配置:
环境变量
MAVEN_HOME: maven安装目录
path: %MAVEN_HOME%\bin
Maven软件版本测试:

三.Maven仓库
(1)Maven仓库分类:

1. 本地仓库
项目通过jar坐标,先从本地仓库找对应jar包,如果找不到会从远程仓库(互联网)去下载 jar 包,保存在本地仓库(在程序员的电脑 上),第二次不需要从远程仓库去下载。
2. 远程仓库
1 中央仓库
由专业团队(maven团队)统一维护。
中央仓库的地址:http://repo1.maven.org/maven2/在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。2 私服
架设在公司局域网内,提供给内部的人员使用。私服是一种特殊的远程仓库,其内容是来自于其他的远程仓库,一般架设在局域网内,提供给一个组织的人员使用。当 Maven 需要下载依赖时,从私服请求,如果私服上不存在该依赖,则从其他远程仓库下载,同时缓存在私服上,提供给其他人使用。如果项目中的一些内部模块,无法发布到外部远程仓库中,也可发布在私服上,提供给项目中的其他人员使用。3第三方仓库
Maven 仓库默认中央仓库在国外且只有一个, 国内使用难免很慢,我们可以更换为第三方公共库,例如:阿里云镜像
依赖寻找流程:
本地仓库:
(2)Maven本地仓库的配置:
1. 将Maven下载好的仓库 解压到非中文及特殊符号目录下
2. 修改 maven的安装目录/conf/settings.xml 文件的标签
<localRepository>本地仓库地址</localRepository>
指定自定义本地仓库
(3)Maven仓库国内镜像的配置
修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
(4)全局setting与用户setting
四:Maven坐标和依赖:
groupId :定义当前 Maven 项目名称artifactId :定义项目模块version :定义当前项目的当前版本

<!--当前项目坐标-->
<groupId>com.wsl</groupId>
<artifactId>maven_helloword</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 依赖关系 -->
<dependencies>
<!-- 此项目运行使用junit,所以此项目依赖junit -->
<dependency>
<!-- junit的项目名称 -->
<groupId>junit</groupId>
<!-- junit的模块名称 -->
<artifactId>junit</artifactId>
<!-- junit版本 -->
<version>4.12</version>
<!-- 依赖范围:单元测试时使用junit -->
<scope>test</scope>
</dependency>
</dependencies>
五.Maven工程结构:
传统java工程遇到的问题:
Maven项目结构:
* java项目
java工程名(项目名)
|-- src目录
|-- main目录(主干代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- test目录(测试代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- pom.xml(maven工程核心配置文件)
|-- target目录(存放编译后的class文件.....)
* web项目【重点】
web工程名(项目名)
|-- src目录
|-- main目录(主干代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- webapp目录(页面资源)
|-- WEB-INF
|-- web.xml(web工程核心配置文件)
|-- index.jsp
|-- css、js、img..
|-- test目录(测试代码)
|-- java目录(java代码)
|-- resources目录(配置文件)
|-- pom.xml(maven工程核心配置文件)
|-- target目录(存放编译后的class文件.....)
六.Maven生命周期和插件:
(1)Maven常用命令和插件:
我们可以在 cmd 中通过一系列的 maven 命令,来对我们的工程进行编译、测试、打包、安装、部署。
1)clean
maven工程的清理命令,执行clean会删除target目录及内容。
2)compile
maven工程的编译命令,作用是将 src/main/java 下的文件编译为class文件输出到target目录下。
3)test
maven工程的测试命令,作用是执行 src/test/java 下单元测试类,并编译为class文件。
4)package
maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。
注意:为什么maven_hello是war包而不是jar包呢?
5)install
maven工程的安装命令,执行install将mave工程打成jar包或war包,并发布到本地仓库。
6)deploy
maven工程部署命令,将jar或war包部署(上传)到私服中。
(2)生命周期:
maven 对项目构建过程分为“三套相互独立的”生命周期,这三套生命周期分别是:
1. Clean Lifecycle(清理生命周期)
在进行真正的构建之前进行一些清理工作。
命令:clean
2. Default Lifecycle(默认生命周期)
构建的核心部分,编译,测试,打包,部署等等。
命令: compile test package install deploy
3. Site Lifecycle(站点生命周期)
生成项目报告,站点,发布站点。
命令: site
* 在同一个生命周期中的命令,执行后面的命令,前面的命令自动执行
- pre-clean:执行一些需要在clean之前完成的工作
- clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后立刻完成的工作

site生命周期:
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
(3)Maven概念模型:
<!-- 依赖关系 -->
<dependencies>
<!-- 此项目运行使用junit,所以此项目依赖junit -->
<dependency>
<!-- junit的项目名称 -->
<groupId>junit</groupId>
<!-- junit的模块名称 -->
<artifactId>junit</artifactId>
<!-- junit版本 -->
<version>4.12</version>
<!-- 依赖范围:单元测试时使用junit -->
<scope>test</scope>
</dependency>
</dependencies>

七.IDEA创建Maven工程
(1)IDEA配置本地Maven环境(全局配置)
如果我们在IDEA创建maven工程默认从互联网在下载一个骨架(但是若电脑没有联网,就会卡顿一段时间,再使用本地骨架),我们可以直接指定IDEA查找本地骨架,效率提升
-DarchetypeCatalog=internal -Dfile.encoding=GB2312
初始化工作空间:
设置jdk环境:
统一编码环境

方法之间加入一条分割线:
(2)创建一个全新的工作空间(基于Maven结构)
(1)IDEA创建工程
java工程:
手动创建test测试配置文件目录
指定maven环境的jdk版本和字符集
<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
maven工程命令操作:
如何导入依赖:
maven的搜索仓库:https://mvnrepository.com/
web工程
idea创建web工程,我们需要安装一个插件:
安装完成后,重启idea工具
注意:
有些时候创建maven之后,文件夹不变颜色,需要手动刷新:
发布web工程:
idea使用外置tomcat运行
idea使用maven内置tomcat插件
<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
双击启动
命令启动
(3)依赖管理: