一.介绍
Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具。作为一个强大的项目管理和构建工具,在软件开发过程中解决了多个关键问题,特别是在Java领域。以下是Maven主要解决的问题:
1. 依赖管理
- 依赖自动解析与下载:Maven通过定义在
pom.xml
文件中的依赖项,能够自动从配置的仓库(如Maven中央仓库)中解析并下载项目所需的第三方库和框架,大大简化了依赖管理的复杂性。 - 依赖版本冲突:Maven提供了依赖冲突解决机制,通过依赖树(dependency tree)的查看和手动排除(exclusions)特定的依赖,可以有效地解决依赖版本冲突问题。
- 依赖版本管理:使用
<dependencyManagement>
标签可以在pom.xml
中统一管理依赖的版本,确保项目中所有模块使用的依赖版本一致。
2. 项目构建自动化
- 标准化构建过程:Maven将项目的构建过程(如清理、编译、测试、打包、部署等)标准化,并提供了丰富的插件来支持这些构建任务,使得项目的构建过程更加规范和高效。
- 跨平台构建:Maven提供了一致的操作接口,使得项目可以在不同的操作系统和环境中进行构建,提高了项目的可移植性和可维护性。
3. 项目信息管理
- 项目元数据管理:Maven通过
pom.xml
文件管理项目的元数据,包括项目描述、开发者信息、版本控制系统地址等,这些信息有助于团队成员更好地理解和维护项目。 - 生成项目文档和报告:Maven能够自动生成项目的文档(如API文档)和报告(如测试报告、静态代码分析报告等),为项目的质量评估和持续改进提供了有力支持。
4. 团队协作
- 统一构建工具:Maven为团队成员提供了一种统一的构建工具,使得团队成员可以共享项目的构建配置和依赖信息,减少了因构建环境差异导致的问题。
- 集成版本控制系统:Maven与版本控制系统(如Git)的集成,使得开发者可以更方便地跟踪和管理代码变更,促进了团队协作和版本控制。
5. 插件支持
- 扩展性强:Maven拥有丰富的插件生态系统,开发者可以通过编写或使用第三方插件来扩展Maven的功能,满足特定的项目需求。
二.安装与配置
maven安装之前要先安装jdk,请确保你的系统已经安装了jdk环境。
1. 选择需要的maven版本下载
2. 下载完成后,解压缩到非中文,没有空格的目录
文件内容
3. 配置环境变量
新建系统变量MAVEN_HOME
编辑系统变量Path,添加变量值%MAVEN_HOME%\bin![img](https://img-blog.csdnimg.cn/img_convert/fd3a17884dbd46e2ea7980c8360c9615.png)
验证
4. 配置settings文件
修改本地仓库地址
- 在maven安装目录下新建文件夹作为本地仓库
- 在setting中修改
配置私服
配置私服,因为中央仓库在国外导致下载jar包很慢或者失败,所以我们改为国内的服务器,下面三个选择一个就可以了。
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>nexus-163</id>
<mirrorOf>*</mirrorOf>
<name>Nexus 163</name>
<url>http://mirrors.163.com/maven/repository/maven-public/</url>
</mirror>
<mirror>
<id>nexus-tencentyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus tencentyun</name>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
idea配置
修改为自己安装的位置
三.依赖管理
Maven Repository: Search/Browse/Explore (mvnrepository.com)
1. 依赖配置
-
依赖
指的是当前项目运行所需要的jar包,一个项目中可以引入多个依赖 -
配置
-
在pom.xml中编写标签
-
在标签中,使用引入坐标
-
定义坐标的groupId,artifactId,version
-
点击刷新按钮,引入最新加入的坐标
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>untitled</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
2. 依赖传递
Maven 会自动处理依赖的传递性。如果项目 A 依赖于项目 B,而项目 B 又依赖于项目 C,那么 Maven 会自动将项目 C 作为项目 A 的间接依赖项引入。
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目就间接依赖其他资源
- 排除依赖
排除依赖可以主动断开依赖的资源,被排除的资源无需指定版本
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
3. 依赖范围
Maven 允许为依赖项指定一个范围,这个范围决定了依赖项在哪些阶段(编译、测试、运行等)可用。常见的范围包括 compile、test、runtime、provided 和 system。
compile:默认范围,在编译、测试和运行阶段都有效。
test:仅在测试阶段有效,例如 JUnit。
runtime:在编译时不需要,但在运行时和测试时需要。
provided:在编译和测试时需要,但在运行时由 JDK 或容器提供。
system:与 provided 类似,但你需要手动指定依赖项的路径。
依赖的jar包默认在任何地方都可以使用,可以通过标签设置其作用范围
四.生命周期
Maven的生命周期是Maven构建工具的核心概念之一,它为项目构建提供了一个标准化和自动化的框架。Maven的生命周期是对构建过程进行的抽象,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。Maven的生命周期是抽象的,即生命周期本身不做任何实际的工作,而是定义了一系列的阶段(phase),并确定这些阶段的执行顺序。实际的任务由插件(plugin)来完成。
Maven内部有三个标准生命周期,分别是:
1. clean生命周期
目的是清理项目。
-
包含三个阶段:
-
- pre-clean:执行一些清理前需要完成的工作。
- clean:清理上一次构建生成的文件,主要是删除target目录。
- post-clean:执行一些清理后需要完成的工作。
2. default(或称为build)生命周期
是Maven生命周期中的核心部分,定义了真正构建项目时所需要执行的所有步骤。
-
包含多个阶段,以下是一些关键的阶段:
-
- validate:验证项目是否正确,所有需要的资源是否可用。
- compile:编译项目的源代码。
- test:使用合适的单元测试框架来测试已编译的源代码。
- package:把已编译的代码打包成可发布的格式,如jar。
- integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
- verify:运行所有检查,验证包是否有效且达到质量标准。
- install:把包安装到Maven本地仓库,可以被其他工程作为依赖来使用。
- deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
3. site生命周期
目的是建立和发布项目站点。
-
包含的阶段如下:
-
- pre-site:生成项目站点之前需要完成的工作。
- site:生成项目站点文档。
- post-site:生成项目站点之后需要完成的工作。
- site-deploy:将项目站点发布到服务器。
我们主要关注五个阶段
clean compile test package install