Maven详解

发布于:2025-07-11 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

Maven简介

为什么要用Maven?

什么是Maven?

Maven的下载和安装

核心概念

1. 项目对象模型(POM)

2.坐标

3. 依赖管理

4.仓库

5.生命周期

Maven工作机制

常用命令


Maven简介

为什么要用Maven?

        现在的JAVA开发,有大量的第三方框架和工具可以供我们使用。

        在没有Maven之前,想要使用jar包,常见方法就是复制粘贴到 WEB-INF/lib 目录下。但是每次创建一个新的工程就需要将 jar 包重复复制到 lib 目录下,从而造成工作区中存在大量重复的文件。其二,jar包之间一般会存在依赖关系,而我们拿到一个新的jar包可能不清楚其中的依赖关系,导致依赖不够、程序无法运行,且大型项目中存在大量jar包,如需手动逐一确认每个jar包的依赖,会耗费巨大精力和时间。其三,java开发依赖的jar包种类繁多,下载地址不同,搜索不便,还可能找到同名但不是你想要的jar包。

        使用了Maven之后,每个 jar 包只在本地仓库中保存一份,需要 jar 包的工程只需要以坐标的方式引用即可,避免了大量的重复文件。引入 Maven 后,Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来, 无需人工参与,节约了我们大量的时间和精力。使用 Maven 我们可以享受到一个完全统一规范的 jar 包管理体系,只需要在你的项目中以坐标的方式依赖一个 jar 包,Maven 就会自动从中央仓库进行下载,并同时下载这个 jar 包所依赖的其他 jar 包。

什么是Maven?

        Maven 是 Apache 软件基金会开发的一款基于项目对象模型(POM)理念的 Java 项目管理与构建自动化工具。它借助一个中央配置文件(pom.xml),能够对项目的构建、报告以及文档等全过程进行有效管理。作为 Java 生态系统的核心工具之一,Maven 通过标准化的项目结构和生命周期,解决了软件开发中依赖管理和构建流程复杂的问题。

Maven的下载和安装

1、下载地址:Maven – Introduction

2、下载后解压maven安装包,放在一个非中文无空格的文件夹中

3、配置maven的相关环境变量

        新增环境变量名:MAVEN_HOME;

        变量值为安装目录bin目录的上一级目录;

        编辑Path,新增  %MAVEN_HOME%\bin  

4、验证是否安装成功

        运行 mvn -v 命令查看maven的版本 

C:\Users\Administrator>mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:1
4+08:00)
Maven home: E:\Program Files\maven3.5.4\apache-maven-3.5.4\bin\..
Java version: 1.8.0_25, vendor: Oracle Corporation, runtime: E:\Program Files\ja
va1.8\jdk1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

核心概念

1. 项目对象模型(POM)
  • 定义:项目的核心配置文件pom.xml,以 XML 格式呈现,对项目的基本信息(像项目名称、版本、组织等)、依赖关系、插件以及构建流程等方面进行描述。
  • 关键元素
    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.example</groupId>    <!-- 项目组织标识 -->
      <artifactId>my-project</artifactId> <!-- 项目唯一标识 -->
      <version>1.0.0</version>           <!-- 项目版本 -->
      <dependencies>...</dependencies>   <!-- 依赖管理 -->
      <build>...</build>                 <!-- 构建配置 -->
    </project>
2.坐标

        在 Maven 中,坐标(Coordinates)是用于唯一标识和定位构件(Artifacts)的一组元数据。通过坐标,Maven 可以精确地从仓库中查找和获取项目所需的依赖。

  1. groupId

    • 含义:项目组织的唯一标识,通常是公司或组织的域名倒序(如com.example)。

    • 作用:区分不同组织或公司的项目。

    • 示例org.springframeworkcom.google.guava

  2. artifactId

    • 含义:项目中的模块或构件名称,通常是项目名称或子模块名称。

    • 作用:区分同一组织下的不同项目。

    • 示例spring-coreguava

  3. version

    • 含义:项目的版本号,遵循语义化版本规则(如1.0.02.5.3.RELEASE)。

    • 作用:区分同一项目的不同迭代版本。

    • 示例5.3.1831.1-jre

完整坐标示例:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.3.18</version>
</dependency>
3. 依赖管理

        Maven 通过中央仓库(如 Maven Central)自动下载项目所需的依赖库,避免手动管理 JAR 包的麻烦。

  • 依赖声明示例
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.18</version>
      </dependency>
    </dependencies>
4.仓库

        仓库在依赖管理和项目构建中扮演着至关重要的角色。Maven 通过仓库来存储和检索项目所需的所有构件(如 JAR 包、WAR 包、插件等),是实现依赖自动化的基础。当我们在pom.xml中声明一个依赖时,Maven 会自动从仓库中查找并下载对应的构件。

       Maven 的仓库系统采用三层结构:

  • 本地仓库(Local Repository):开发机上的缓存目录(默认~/.m2/repository,可自己配置),避免重复下载,如果我们本地项目需要某个jar包,优先去本地仓库去找依赖。

  • 远程仓库(Remote Repository):如中央仓库(Maven Central)、第三方仓库(如 Spring 的仓库)。

  • 私服(Nexus/Artifactory):企业内部的私有仓库,加速下载并托管自研构件。

三种仓库的关系:

        Maven 的仓库系统采用三级缓存架构,依赖查找顺序为:本地仓库 → 私服 → 中央仓库(或其他远程仓库)。

仓库配置方法:

1. 本地仓库配置

按路径找到maven/conf/settings.xml,编辑 localRepository 自定义本地仓库路径:

<settings>
  <localRepository>/path/to/your/local/repo</localRepository>
</settings>

2. 私服配置(镜像)

按路径找到maven/conf/settings.xml,通过镜像(Mirror配置将所有远程仓库请求重定向到私服:

<settings>
  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>  <!-- 匹配所有远程仓库 -->
      <url>http://nexus.example.com/repository/maven-public</url>
    </mirror>
  </mirrors>
</settings>
5.生命周期

三大生命周期体系

Maven 定义了 3 个独立且并行的生命周期,每个生命周期包含多个 阶段(Phase),阶段按顺序执行:

  1. Clean Lifecycle
    清理项目构建生成的文件,主要阶段:

    pre-clean → clean → post-clean
    
  2. Default Lifecycle
    核心构建流程,从编译到部署的完整过程,包含约 20 个阶段(最常用)

    validate → initialize → generate-sources → process-sources → 
    compile → process-classes → generate-test-sources → process-test-sources → 
    test-compile → process-test-classes → test → prepare-package → 
    package → pre-integration-test → integration-test → post-integration-test → 
    verify → install → deploy
    
  3. Site Lifecycle
    生成项目文档和报告,主要阶段:

    pre-site → site → post-site → site-deploy

执行某个阶段时,Maven 会自动触发该阶段及其之前的所有阶段。

Default Lifecycle 关键阶段详解

1. 编译阶段

  • validate:验证项目配置是否正确(如 POM 格式、必填字段)。

  • generate-sources:生成源代码(如从模板或注解处理器生成)。

  • compile:编译主代码(src/main/java)。

  • process-classes:处理编译后的类文件(如字节码增强)。

2. 测试阶段

  • generate-test-sources:生成测试源代码。

  • test-compile:编译测试代码(src/test/java)。

  • test:使用测试框架(如 JUnit)执行单元测试(不生成测试报告)。

3. 打包阶段

  • package:将编译后的代码打包为 JAR/WAR/EAR 等格式。

  • verify:执行集成测试和验证(如检查代码覆盖率、静态分析)。

4. 安装 / 部署阶段

  • install:将打包后的文件安装到本地仓库(~/.m2/repository)。

  • deploy:将打包后的文件发布到远程仓库(如公司私服)。

Maven工作机制

当执行 Maven 命令(如mvn package)时,其内部处理流程如下:

  1. 解析 POM 文件

    • 从当前目录读取pom.xml,递归解析父 POM(通过<parent>标签)和模块依赖。

    • 合并所有 POM 配置,形成完整的项目模型。

  2. 确定生命周期阶段

    • 根据命令(如package)确定目标阶段,并触发该阶段及之前的所有阶段(如validate → compile → test → package)。

  3. 插件绑定与执行

    • 为每个阶段查找绑定的插件(默认或自定义配置)。

    • 按顺序执行插件的目标(Goal),完成具体任务(如编译、测试、打包)。

  4. 依赖解析

    • 根据pom.xml中的<dependencies>声明,从本地仓库查找依赖。

    • 若本地缺失,从远程仓库(或私服)下载并缓存到本地。

  5. 执行构建任务

    • 插件按配置执行具体操作,生成结果(如 JAR 包、WAR 包)。

常用命令

命令 作用
mvn clean 删除构建产物(target 目录)
mvn compile 编译主代码
mvn test 编译并执行测试
mvn package 打包(JAR/WAR)
mvn install 安装到本地仓库
mvn deploy 部署到远程仓库


网站公告

今日签到

点亮在社区的每一天
去签到