Maven简介
# Maven 简介
# 传统项目管理面临的痛点
在没有 Maven 之前,Java 项目管理存在以下问题:
- jar 包管理混乱:手动下载和管理 jar 包,容易出现版本不统一、版本冲突等问题。
- 工程升级维护繁琐:依赖变更需要手动增删 jar 包,操作繁琐且容易出错。
- 项目结构不统一:不同开发者、不同 IDE 创建的项目结构各不相同,协作困难。
# Maven 是什么?
Maven 本质是一个项目管理工具,它将项目开发和管理过程抽象成一个对象模型(POM)。
POM(Project Object Model):项目对象模型,即
pom.xml文件,是 Maven 项目的核心配置文件。
# Maven 的作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式。
- 依赖管理:方便快捷地管理项目所需的资源(jar 包),自动处理版本冲突问题。
- 统一开发结构:提供标准的、统一的项目结构,降低团队协作成本。
# 下载与安装
- 官网:https://maven.apache.org/ (opens new window)
- 下载地址:https://maven.apache.org/download.cgi (opens new window)
# 环境变量配置
Maven 依赖 Java 环境,因此需要配置以下环境变量:
| 环境变量 | 说明 |
|---|---|
JAVA_HOME | 指定 JDK 的安装路径,Maven 运行依赖 JDK |
MAVEN_HOME | 指定 Maven 的安装路径 |
PATH | 将 %MAVEN_HOME%\bin 添加到 PATH 中 |
配置完成后,在命令行执行 mvn -v,若正确显示 Maven 版本信息,则说明安装配置成功。
# Maven 目录结构
解压 Maven 安装包后,目录结构如下:
# bin 目录
Maven 的脚本目录,包含所有可执行命令,如 mvn、mvnDebug 等。
# boot 目录
Maven 的启动类加载器目录,包含 plexus-classworlds 类加载器框架。
# conf 目录
Maven 的配置文件目录,其中最重要的配置文件是 settings.xml。
# settings.xml 常见配置项
localRepository:指定本地仓库的路径。本地仓库是 Maven 用来存储项目依赖的地方。默认情况下,本地仓库位于用户主目录下的.m2文件夹中。mirrors:用于配置镜像仓库。镜像仓库用于替代中央仓库下载依赖,可以配置多个镜像,每个镜像包含id、url和mirrorOf等属性。proxies:用于配置代理服务器。如果需要通过代理服务器访问外部资源,可以在此配置代理的主机名、端口号、用户名和密码等信息。servers:用于配置服务器认证信息。如果需要访问需要身份验证的远程仓库或发布构件到远程仓库,可以在此配置服务器的id、用户名和密码等。profiles:用于配置环境配置文件。可以根据不同的环境或需求,定义不同的 profile,并配置激活条件(如操作系统、JDK 版本等)。pluginGroups:用于配置插件组。插件组是一组相关的插件,配置后可以在命令行中直接使用插件的前缀,而无需指定完整的插件坐标。
更详细的
settings.xml配置说明,请参考 Maven 配置文件详解。
# Maven 基础概念
# 仓库
仓库用于存储 Maven 资源,包含各种 jar 包和插件。
# 仓库分类
| 仓库类型 | 说明 |
|---|---|
| 本地仓库 | 自己电脑上存储资源的仓库,从远程仓库获取资源并缓存到本地 |
| 远程仓库 | 非本机电脑上的仓库,为本地仓库提供资源 |
| 中央仓库 | Maven 团队维护的公共仓库,存储了大量开源资源 |
| 私服仓库 | 部门/公司范围内共享的仓库,通常从中央仓库获取并缓存资源 |
资源获取顺序:本地仓库 → 私服仓库 → 中央仓库
# 私服的作用
- 保存具有版权的资源:包含购买或自主研发的 jar 包,中央仓库中的资源都是开源的,不能存储具有版权的资源。
- 范围内共享资源:仅对内部开发团队共享,不对外公开。
- 加速依赖下载:私服缓存了中央仓库的资源,内部团队从私服下载速度更快。
# 坐标
# 什么是坐标?
Maven 中的坐标用于唯一标识仓库中的资源位置,类似于地理坐标系中的经纬度。
# Maven 坐标的组成
| 属性 | 说明 | 示例 |
|---|---|---|
groupId | 组织 ID,定义当前项目隶属的组织(通常域名反写) | com.example |
artifactId | 项目 ID,定义当前项目的名称(通常是模块名称) | my-project |
version | 版本号,定义当前项目的版本 | 1.0.0 |
packaging | 打包方式,默认为 jar | jar / war / pom |
# Maven 坐标的作用
通过唯一标识定位资源位置,使资源的识别与下载工作可以自动化完成,无需人工干预。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.29</version>
<packaging>jar</packaging>
</dependency>
2
3
4
5
6