文章目录
- [1 Maven概述](#1 Maven概述)
- [2 Maven项目基础](#2 Maven项目基础)
-
- [2.1 项目坐标](#2.1 项目坐标)
- [2.2 项目结构](#2.2 项目结构)
- [2.3 pom配置文件](#2.3 pom配置文件)
- [3 Maven依赖管理](#3 Maven依赖管理)
-
- [3.1 依赖配置](#3.1 依赖配置)
- [3.2 依赖范围](#3.2 依赖范围)
- [3.3 依赖传递和排除](#3.3 依赖传递和排除)
- [4 Maven生命周期](#4 Maven生命周期)
- [5 参考资料](#5 参考资料)
1 Maven概述
Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具,通过一小段描述信息来管理项目的构建、报告和文档。
-
方便的依赖管理:方便快捷的管理项目依赖的资源(jar包)。
-
统一的项目结构:提供标准、统一的项目结构。
-
标准的项目构建流程:提供标准的、跨平台的自动化项目构建方式。
2 Maven项目基础
2.1 项目坐标
Maven中的坐标是资源的唯一标识,通过三个向量唯一定位资源位置。
-
groupId
:定义当前Maven项目隶属组织的名称,通常是域名反写(例如net.csdn) -
artifactId
:定义当前Maven项目的名称,通常是模块名称(例如 order-service、auth) -
version
:定义当前项目版本号
2.2 项目结构
maven-project
|--- src 源代码目录和测试代码目录
|--- main 源代码目录
|--- java 源代码java文件目录
|--- resources 源代码配置文件目录
|--- test 测试代码目录
|--- java 测试代码java目录
|--- resources 测试代码配置文件目录
|--- target 编译、打包生成文件存放目录
|--- pom.xml 项目配置文件
2.3 pom配置文件
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- POM模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 当前项目坐标 -->
<groupId>org.example</groupId>
<artifactId>maven-project01</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 指定项目代码版本、编码等属性 -->
<properties>
<maven.compiler.source>20</maven.compiler.source>
<maven.compiler.target>20</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 项目打包方式,默认为jar -->
<packaging>jar</packaging>
<!-- 项目依赖 -->
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>
</project>
3 Maven依赖管理
3.1 依赖配置
依赖:指当前项目运行所需要的jar包。
一个项目中可以引入多个依赖,通过指定依赖的坐标值引入依赖。
xml
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
3.2 依赖范围
可以通过使用scope
标签指定依赖的作用范围。
scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
test | - | Y | - | junit |
3.3 依赖传递和排除
maven的依赖具有传递性,对于某个配置建立的依赖(直接依赖)它会自动把所依赖的其他jar包也一起导入(间接依赖)。
配置依赖的排除其实就是阻止某些 jar 包的传递,因为这样的 jar 包传递过来可能会和其他 jar 包冲突,一般通过使用exclusion
标签配置依赖的排除
xml
<dependency>
<groupId>org.example</groupId>
<artifactId>maven-project01</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 排除依赖,无需指定版本号 -->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
4 Maven生命周期
Maven的生命周期就是为了对所有的构建过程进行抽象和统一,分为相互独立的clean(清理工作)、default(核心工作)、site(生成报告、发布站点等)共三套。
Maven的生命周期是抽象的,本身不做任何实际工作,实际任务都交由插件来完成。在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。常用的生命周期阶段包括
-
clean:移除上一次构建生成的文件。
-
compile:编译项目源代码。
-
test:使用合适的单元测试框架运行测试(junit)。
-
package:将编译后的文件打包。
-
install:安装项目到本地仓库。