Maven
1 概述
1.1 定义
Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。
1.2 作用
1) 依赖管理 (管理项目依赖的资源(jar包),避免版本冲突问题)
2) 统一项目结构 (当使用不同的开发工具 (如:Eclipse、Idea),创建项目工程时, Maven会帮我们自动生成统一、标准的项目目录结构)
3) 项目构建 (maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式)
1.3 Maven模型
1.3.1 项目对象模型 (Project Object Model)
指将项目抽象成一个对象模型,有自己专属的坐标 ((jar包)的唯一标识,通过坐标可以定位到所需资源(jar包)位置)
1.3.2 依赖管理模型(Dependency)
依赖管理模型,是使用坐标来描述当前项目依赖哪些第三方jar包
1.3.3 构建生命周期/阶段(Build lifecycle & phases)
完成标准化构建流程 。当需要编译时,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用
1.4 Maven仓库 (Repository)
1.4.1 作用
仓库的本质就是一个目录(文件夹),这个目录被用来存储管理开发中所有依赖(就是jar包)和插件
1.4.2 仓库类型
- 本地仓库: 自己计算机上的一个目录(用来存储jar包)
- 中央仓库: 由Maven团队维护的全球唯一的。
- 远程仓库(私服):一般由公司团队搭建的私有仓库
jar包的查找顺序则变为: 本地仓库 --> 远程仓库--> 中央仓库
1.5 Maven的依赖管理
1.5.1 依赖配置
1.5.2 依赖
指当前项目运行所需要的jar包。一个项目中可以引入多个依赖
例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引入logback的依赖。具体步骤如下:
- 在pom.xml中编写标签
- 在标签中使用引入坐标
- 定义坐标的 groupId、artifactId、version
- 点击刷新按钮,引入最新加入的坐标
<dependencies>
//坐标
<!-- 第1个依赖 : logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<!-- 第2个依赖 : junit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>
1.6 依赖传递
1.6.1 依赖具有传递性
依赖传递可以分为:
-
直接依赖:在当前项目中通过依赖配置建立的依赖关系
-
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
由于maven的依赖具有传递性,当在pom.xml配置文件中添加了jar的依赖坐标, jar包会自动把所依赖的其他jar包也一起导入
1.6.2 排除依赖
指主动断开依赖的资源。(被排除的资源无需指定版本)
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven-projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖, 主动断开依赖的资源-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
1.7 依赖范围
在项目中导入依赖的jar包后,默认情况下,可以在任何地方使用。
如果希望限制依赖的使用范围,可以通过标签设置其作用范围。
作用范围:
-
主程序范围有效(main文件夹范围内)
-
测试程序范围有效(test文件夹范围内)
-
是否参与打包运行(package指令范围内)
| scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
|---|---|---|---|---|
| compile(默认) | Y | Y | Y | log4j |
| test | - | Y | - | junit |
| provided | Y | Y | - | servlet-api |
| runtime | - | Y | Y | jdbc驱动 |
1.8 生命周期
Maven的生命周期就是为了对所有的构建过程进行抽象和统一
1.8.1 生命周期之clean
清理工作。
1.8.2 生命周期之default
核心工作。如:编译、测试、打包、安装、部署等。
1.8.3 生命周期之site
生成报告、发布站点等。
1.8.4 生命周期的顺序
生命周期的顺序是:clean --> validate --> compile --> test --> package --> verify --> install --> site --> deploy
需要关注就是:clean --> compile --> test --> package --> install
1.8.5 执行
- 在idea工具右侧的maven工具栏中,选择对应的生命周期,双击执行
- 在DOS命令行中,通过maven命令执行
2 配置
2.1 固定JDK版本和字体
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2.2 查找Jar包的网址
https://mvnrepository.com
2.3 MavenProject文件
src==>man==>java (主要写的程序内容) + resources (核心配置文件和静态界面)
test==>java (测试写的程序内容) + resources (核心配置文件和静态界面)
pox.xml: 用来管理jar包, 配置管理依赖 (dependency, exclusion, scope)