Manve
1.WHY?
Maven 并不是直接用来辅助编码的,它战斗的岗位并不是以上各层。所以我们有必要通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足。
2.WHAT?
2.1Maven 简介
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和
依赖管理。Maven 这个单词的本意是:专家,内行
2.2.什么是构建
构建就是以我们编写的Java代码、框架配置文件、国际化等其他资源文件、Jsp页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
2.3.构建过程中的各个环节
- 清理:删除以前的编译结果,为重新编译做好准备2
- 编译:将 Java 源程序编译为字节码文件。
- 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
- 报告:在每一次测试后以标准的格式记录和展示测试结果。
- 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。
- 安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
- 部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。
2.4.自动化构建
Maven可以自动的从构建过程的起点一直执行到终点;
2.5 Maven 核心概念
Maven 能够实现自动化构建是和它的内部原理分不开的,这里我们从 Maven 的九个核心概念入手,
看看 Maven 是如何实现自动化构建的
- POM
- 约定的目录结构
- 坐标
- 依赖管理
- 仓库管理
- 生命周期/插件/目标
- 插件和目标
- 继承
- 聚合
3.安装maven核心程序
1.检查JAVA_HOME环境变量
C:\Users\ZHH>echo %JAVA_HOME%
E:\java\jdk
2.将Maven放在一个非中文无空格路径下
E:\java\maven\apache-maven-3.2.2
3.配置Maven相关的环境变量
-
MAVEN_HOME或M2_HOME
E:\java\maven\apache-maven-3.2.2
-
path
%M2_HOME%\bin
4.验证:运行mvn -v命令查看Maven版本
4.创建第一个Maven工程
4.1.创建约定的目录结构
- 根目录:工程名
- src目录:源码
- pom.xml:Maven工程的核心配置文件
- main目录:存放主程序
- test目录:存放测试程序
- java目录:存放java源文件
- resources目录:存放框架或其他工具的配置文件
4.2.为什么要遵守约定的目录结构呢?
是为了让Maven能够识别我们自定义的东西,从而进行项目的自动化构建。
约定>配置>编码
4.3.运行几个基本的Maven命令
mvn compile 编译
mvn clean 清理
mvn test 测试
mvn package 打包
※注意:运行Maven命令时一定要进入pom.xml文件所在的目录!
4.4.关于联网问题
1.Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件完成,而插件本身并不包含在Maven的核心程序中
2.当我们执行的Maven命令中需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。
3.本地仓库的位置
C:\Users\ZHH\.m2\repository
4.Maven的核心程序如果在本地仓库找不到需要的插件,那么他会自动连接外网,到中央仓库下载
5.如果此时无法连接外网,则构建失败。
6.修改默认本地仓库的位置可以让Maven的核心程序到我们事先准备好的目录下查找插件
-
找到Maven解压目录\conf\settings.xml
-
在settings.xml找到localRepository标签
-
将/path/to/local/repo从注释中取出
-
将标签内容修改为已经准备好的Maven仓库目录
<localRepository>E:\java\RepMaven</localRepository>
-
POM
Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。
Maven 工程的核心配置。可以说学习 Maven 就是学习 pom.xml 文件中的配置。
8.坐标
使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。
[1]groupid:公司或组织的域名倒序+当前项目名称
<groupId>com.atguigu.maven</groupId>
[2]artifactId:当前项目的模块名称
<artifactId>Hello</artifactId>
[3]version:当前模块的版本
<version>0.0.1-SNAPSHOT</version>
如何通过坐标到仓库中查找 jar 包
[1]将 gav 三个向量连起来
com.atguigu.maven+Hello+0.0.1-SNAPSHOT
[2]以连起来的字符串作为目录结构到仓库中查找
com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar
※注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install
4.5.仓库
4.5.1分类
[1]本地仓库:为当前本机电脑上的所有 Maven 工程服务。
[2]远程仓库
(1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
(2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
(3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
4.5.2 仓库中的文件
[1]Maven 的插件
[2]我们自己开发的项目的模块
[3]第三方框架或工具的 jar 包
※不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。
4.6.依赖
-
4.6.1.Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。
对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库。
-
依赖的范围
- compile范围依赖
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:打包
- 是否参与部署:参与
- 典型例子:spring-core
- test范围依赖
- 对主程序是否有效:无效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 是否参与部署:不参与
- 典型例子:junit
- provided范围依赖
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 是否参与部署:不参与
- 典型例子:servlet-api.jar
- compile范围依赖
-
依赖的传递性
- 好处:可以传递的依赖不必在每个模块工程都重复声明,在”最下面“的工程中依赖一次即可
- 注意:非compile范围的依赖不能传递,所以在各个工程模块中,如果有需要就要重复声明依赖。
-
依赖的排除
-
不稳定版,或对当前工程有不良影响的jar包
-
依赖的排除配置方式
<exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions>
-
-
依赖的原则:解决 jar 包冲突
-
]路径最短者优先
-
路径相同时先声明者优先
这里“声明”的先后顺序指的是 dependency 标签配置的先后顺序。
-
4,7.生命周期
- 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
- Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件完成的。
- Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行。
- 插件和目标
- 生命周期的各个阶段仅仅定义了要执行的任务是什么。
- 各个阶段和插件的目标是对应的
- 相似的目标由特定的插件来完成。
- 可以将目标看成“调用插件功能的命令”
5.在idea中使用Maven
5.1.Maven配置路径
- 打开settings
- Build
- Build Tools
- Maven
- Maven home directroy:Maven的安装路径
- User settings file:maven安装目录\conf\settings.xml
- Local repository:获取本地仓库的位置
- Runner
- VM Options:-DarchetypeCatalog=internal maven创建时会从网络下载一个archetype-catalog.xml做为项目的模板文件,大约有8m左右,设置这个表示不用去下载文件,加快maven创建
- JRE:换成自己的jdk
- 打开New Projects settings
- Setting for New Projects
- Build
- Build Tools
- Maven
- Maven home directroy:Maven的安装路径
- User settings file:maven安装目录\conf\settings.xml
- Local repository:获取本地仓库的位置
- Runner
- VM Options:-DarchetypeCatalog=internal maven创建时会从网络下载一个archetype-catalog.xml做为项目的模板文件,大约有8m左右,设置这个表示不用去下载文件,加快maven创建
- JRE:换成自己的jdk
- Setting for New Projects
径
2. User settings file:maven安装目录\conf\settings.xml
3. Local repository:获取本地仓库的位置
4. Runner
1. VM Options:-DarchetypeCatalog=internal maven创建时会从网络下载一个archetype-catalog.xml做为项目的模板文件,大约有8m左右,设置这个表示不用去下载文件,加快maven创建
2. JRE:换成自己的jdk