一、来 , 了解下 Maven ! ! !
-
Maven 是什么 ?
一个对 Maven 比较正式的定义 : Maven是 一个项目管理工具 , 它包含了一个项目对象模型(POM),一组标准集合 , 一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑 .
-
Maven 用来解决什么问题 ?
1.主要是用来解决导入java类依赖的jar,编译java项目主要问题 ;
2.可以解决jar之间的依赖和冲突;
3.jar 包管理,防止jar之间依赖起冲突 ;
4.Maven是基于项目对象模型,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven能够很方便的帮你管理项目报告,生成站点,管理jar文件,等等。例如:项目开发中第三方jar引用的问题,开发过程中合作成员引用的jar版本可能不同,还有可能重复引用相同jar的不同版本,使用maven关联jar就可以配置引用jar的版本,避免冲突。
既然这么多用处,他的优势在哪里下面就聊聊它的优势 :
Maven 优势一:相同的项目结构
使用Maven管理的Java 项目都有着相同的项目结构
有一个pom.xml 用于维护当前项目都用了那些jar包
所有的java代码都放在 src/main/java
- 所有的测试代码都放在src/test/java
image-20200526171021307.png
Maven 优势二:统一维护jar包
比如说有3个Java 项目,这些项目都不是maven风格。那么这3个项目,就会各自维护一套jar包。 而其中有些jar包是相同的。
而maven风格的项目,首先把所有的jar包都放在"maven仓库“ 里,然后哪个项目需要用到这个jar包,只需要给出jar包的名称和版本号就行了。 这样jar包就实现了共享如图所示
image-20200526171123083.png
二、让我们进入 Maven 的使用 ! ! !
2.1.1 Maven 软件的下载
为了使用 Maven 管理工具,我们首先要到官网去下载它的安装软件。通过百度搜索“Maven“如下:
image-20200526171725123.png
点击 Download 链接,就可以直接进入到 Maven 软件的下载页面:
image-20200526171746052.png
2.1.2 Maven 软件的安装
Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如 D:\software\maven 下面。
解压后目录结构如下:
image-20200526171909811.png
bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。
2.1.3 JDK 的准备及统一
本次课程我们所使用工具软件的统一,JDK 使用 JDK8版本
- JDK 环境:
2.1.4 Maven 及 JDK 配置
电脑上需安装 java 环境,安装 JDK1.7 + 版本 (将JAVA_HOME/bin 配置环境变量 path ),我们使用的是 JDK8 相关版本配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录)
image-20200526172034988.png
上面配置了我们的 Maven 软件,注意这个目录就是之前你解压 maven 的压缩文件包在的的目录,最好不要有中文和空格。
再次检查 JDK 的安装目录,如下图:
image-20200526172104217.png
2.1.5 Maven 软件版本测试
通过 mvn -v命令检查 maven 是否安装成功,看到 maven 的版本为 3.5.2 及 java 版本为 1.8 即为安装成功。
找开 cmd 命令,输入 mvn –v命令,如下图:
image-20200526172137018.png
我们发现 maven 的版本,及 jdk 的版本符合要求,这样我们的 maven 软件安装就成功了
三、Maven设置
1、本地仓库
运行过 Maven 命令才会在你的用户目录生成一个 .m2 目录,该目录下有个目录名 repository,这个就是所谓的本地仓库,主要存放是一些下载的 jar 文件。
本地仓库默认位置在用户目录/.m2/repository,本地仓库不建议在系统盘,最佳实践:
将 Maven 根目录的 conf/settings.xml 拷贝到 .m2 中,作为个人 Maven 配置文件;
在 settings.xml 文件中 修改本地仓库的位置。
image-20200526172815933.png
作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。
进入 src 目录后,我们发现它里面的目录结构如下:
image-20200526172836572.png
src/main/java —— 存放项目的.java 文件
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的 class 文件会输出到此目录
pom.xml——maven 项目核心配置文件
注意:如果是普通的 java 项目,那么就没有 webapp 目录。
2.3.2 Maven 工程的运行
进入 maven 工程目录(当前目录有 pom.xml 文件),运行 tomcat:run 命令。
image-20200526172911506.png
2.3.3 问题处理
如果本地仓库配置错误会报下边的错误
image-20200526173005319.png
分析:
maven 工程运行先从本地仓库找 jar 包,本地仓库没有再从中央仓库找,上边提示 downloading…
表示 从中央仓库下载 jar,由于本地没有联网,报错。
解决:
在 maven 安装目录的 conf/setting.xml 文件中配置本地仓库,参考:“maven 仓库/配置本地仓库章节”。
四、 Maven 常用命令
我们可以在 cmd 中通过一系列的 maven 命令来对我们的 maven-helloworld 工程进行编译、测试、运行、打包、安装、部署。
4.1.1 compile
compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
目录下。
cmd 进入命令状态,执行 mvn compile,如下图提示成功:
image-20200526173046423.png
查看 target 目录,class 文件已生成,编译完成。
4.1.2 test
test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。
cmd 执行 mvn test 执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功。
image-20200526173132004.png
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 包发布到本地仓库。
从运行结果中,可以看出:
当后面的命令执行时,前面的操作过程也都会自动执行,
4.1.6 Maven 指令的生命周期
maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,
这三套生命周期分别是:
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
4.1.7 maven 的概念模型
Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
image-20200526173206470.png
项目对象模型 (Project Object Model)
一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、插件目标等。
依赖管理系统(Dependency Management System)
通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。
比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9
的依赖定义:
junit
junit
4.9
test
一个项目生命周期(Project Lifecycle)
使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些
过程规范为一个生命周期,如下所示是生命周期的各阶段:[图片上传中...(idea-2.jpg-b195a7-1590489078136-0)]
image-20200526173337730.png
maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行 mvn compile 执行编译、执行 mvn clean 执行清理。
一组标准集合
maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有
标准的生命周期阶段、依赖管理有标准的坐标定义等。
插件(plugin)目标(goal)
maven 管理项目生命周期过程都是基于插件完成的。
五、****IDEA 中 Maven 的配置
配置安装的 Maven,设置 setttings.xml 和本地仓库。
看看啊看
compile:默认,适用于所有阶段,会随着项目一起发布,在编译,测试,运行时都有效;
provided:编译和测试阶段使用;典型的如 servlet-api.jar,打包时不需要,容器来提供; servlet /lombok
runtime:测试和运行阶段使用,用于接口和实现分离,典型的如 jdbc 具体驱动实现; mysql
test:测试阶段使用,不会随项目发布,如 junit。