1、Maven的安装和环境配置
1.1、安装Maven核心程序
-
检查 JAVA_HOME环境变量
-
解压Maven核心程序的压缩包,放在一个非中文无空格路径下
-
配置 Maven_HOME相关的环境变量
[1] MAVEN_HOME或M2_HOME
[2]path
- 在dos命令符下输入 mvn -v 检查是否安装成功
2、Maven的核心概念
2.1、约定的目录结构
2.2、POM
POM:Project Object Model 项目对象模型
DOM:Document Object Model 文档对象模型
pom.xml 对于 Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件进行配置。重要程度相当于 web.xml 对于动态 Web 工程
2.3、坐标
- 数学中的坐标:
在平面上,使用X,Y两个向量可以唯一的定位平面中的任何一个点。
在空间中,使用X,Y,Z三个向量可以唯一的定位空间中的任何一个点。 - Maven 的坐标
使用下面三个向量在仓库中唯一定位一个Maven工程
1)groupid:公司或组织域名倒序+项目名
2)artifactied:模块名
3)version:版本
<groupId>org.example</groupId>
<artifactId>helloMaven</artifactId>
<version>1.0-SNAPSHOT</version>
- Maven 工程的坐标与仓库中路径的对应关系
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.4.RELEASE</version>
org\springframework\spring-core 这就是它在Maven仓库的路径
2.4、依赖
-
Maven解析依赖信息时会到本地仓库中查找被依赖的 jar 包
对于我们自己开发的 Maven 工程,使用 mvn install 命令安装后就可以进入仓库 -
依赖的范围
[1] compile 范围依赖
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:参与
[2] test 范围依赖
- 对主程序是否有效:无效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 是否参与部署:不参与
- 典型例子:junit
[3] provided 范围依赖
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 是否参与部署:不参与
- 典型例子:servlet-api.jar
s
2.5、仓库
- 仓库的分类
本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务 - 远程仓库:
1)私服:搭建在局域网环境中,为局域网范围内的所有 Maven 工程服务
2)*仓库:架设在 Internet上,为全世界所有Maven工程服务
3)*仓库镜像:为了分担*仓库的流量,提升用户访问速度 - 仓库中保存的内容:Maven工程
1)Maven自身所需要的插件
2)第三方框架或工具的 jar 包
3)我们自己开发的 Maven 工程
2.6、生命周期/插件/目标
-
各个构建执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
-
Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
-
Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期的哪一个阶段,都是从这个生命周期最初的位置开始执行
2.7、继承
2.8、聚合
3、第一个Maven工程
3.1、创建约定的目录结构
1.根目录:工程名
2.src目录:源码
3.pom.xml文件:Maven工程的核心配置文件
4.main目录:存放主程序
5.test目录:存放测试程序
6.java目录:存放Java源文件
7.resources目录:存放框架或其他工具的配置文件
为什么要遵守约定的目录结构?
- Maven要负责我们这个项目的自动化构建,以编译为例,Maven想要自动进行编译,那么它必须知道 Java源文件保存在哪里
- 如果我们自己自定义的东西想要让框架或工具知道,有两种办法
- 已配置的方式明确告诉框架
- 遵守框架内部已经存在的约定
log4j.properties
log4j.xml
约定>配置>编码
4、常用的Maven命令
-
注意:执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录。
与构建过程相关:编译、测试、打包、… -
常用命令
1.mvn clean:清理
2.mvn compile:编译主程序
3.mvn test-compile:编译测试程序
4.mvn test:执行测试
5.mvn package:打包
5、联网问题
- Maven 的核心程序仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件完成。而插件本身并不包含在Maven的核心程序中。
- 当我们执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。
- 本地仓库的默认位置:[系统中当前用户的家目录].\m2\repositoty
- Maven核心程序如果在本地仓库中找不到需要得到插件,那么它会自动连接外网,到*仓库中查找。
- 如果此时无法连接外网,则构建失败
- 修改默认本地仓库的位置可以让 Maven 核心程序到我们事先准备好的目录下查找插件
1)找到 Maven解压目录\conf\settings.xml
2)在settings.xml 文件中找到localRepositoty标签
3)将 /path/to/local/repo 从注释中取出
4)将标签体内容修改为已经准备好的Maven仓库目录