Skip to content

Ⓜ️ Maven



一、初识Maven


1.1 介绍

6c17b888-a900-4ec2-8741-c925276d737e

Maven 是一款用于管理和构建 Java 项目的工具,是 Apache 旗下的一个开源项目 。

Apache 软件基金会,成立于 1999 年 7 月,是目前世界上最大的最受欢迎的开源软件基金会,

也是一个专门为支持开源项目而生的非盈利性组织。

开源项目:https://www.apache.org/index.html#projects-list

Maven : https://maven.apache.org/


那我们之前在 JavaSE 阶段,没有使用Maven,依然可以构建 Java 项目。

我们为什么现在还要学习 Maven 呢 ? 那接下来,我们就来聊聊 Maven 的作用。


1.2 Maven 的作用


8feded37-95bb-48c1-ae64-95fe5bfd281b

1.2.1 依赖管理


方便快捷的管理项目依赖的资源 ( jar 包) ,避免版本冲突问题。


  • 使用 maven 前

    • 我们项目中要想使用某一个 jar 包,就需要把这个 jar 包从官方网站下载下来,

      然后再导入到项目中。然后在这个项目中,就可以使用这个 jar 包了。

96ec3086-87b0-4341-bc59-457ddfa39de3
  • 使用 maven 后
    • 当使用 maven 进行项目依赖 (jar包) 管理,则很方便的可以解决这个问题。

      我们只需要在maven 项目的 pom.xml 文件中,添加一段如下图所示的配置即可实现。

3da82c1e-48ff-4f6d-a3c6-60ca04a0e21c

在 maven 项目的配置文件中,加入上面这么一段配置信息之后,

maven 会自动的根据配置信息的描述,去下载对应的依赖。 然后在项目中,就可以直接使用了。


1.2.2 项目构建


Maven 还提供了标准化的跨平台的自动化构建方式。


6683e177-4f85-4312-812b-d75130ec1f36
  • 如上图所示我们开发了一套系统,代码需要进行编译、测试、打包、发布等过程,

    这些操作是所有项目中都需要做的,如果需要反复进行就显得特别麻烦,

    而 Maven 提供了一套简单的命令来完成项目构建。

e47f1d83-6499-4c77-80bc-29371e504be5
  • 通过 Maven 中的命令,就可以很方便的完成项目的 编译(compile)

    测试(test)打包(package)发布(deploy) 等操作。

    而且这些操作都是跨平台的,也就是说无论你是 Windows 系统,

    还是Linux系统,还是Mac系统,这些命令都是支持的。


1.2.3 统一项目结构


Maven 还提供了标准、统一的项目结构 。


  • 未使用 Maven

    • 由于 java 的开发工具呢,有很多,除了大家熟悉的 IDEA 以外,

      还有像早期的 EclipseMyEclipse。而不同的开发工具,

      创建出来的 java 项目的目录结构是存在差异的,那这就会出现一个问题。

      Eclipse 创建的 java 项目,并不能直接导入 IDEA 中。

      IDEA 创建的 java 项目,也没有办法直接导入到 Eclipse 中。

85cab018-f984-480e-9e55-23a9f2e8c2a3
  • 使用 Maven
    • 而如果我们使用了 Maven 这一款项目构建工具,它给我们提供了一套标准的 java 项目目录。如下所示:
0c129b51-ab09-4ec1-87f7-feeb96938122
  • 也就意味着,无论我们使用的是什么开发工具,只要是基于 maven 构建的 java 项目,

    最终的目录结构都是相同的,如图所示。 那这样呢,我们使用 Eclipse、MyEclipse、

    IDEA 创建的maven项目,就可以在各个开发工具直接直接导入使用了,更加方便、快捷。

36533880-ab8f-47cc-9e10-a0ed1914baea
  • 而在上面的 maven 项目的目录结构中,main 目录下存放的是项目的源代码,

    test 目录下存放的是项目的测试代码。 而无论是在 main 还是在 test 下,都有两个目录,

    一个是 java ,用来存放源代码文件;另一个是resources,用来存放配置文件。

    最后呢,一句话总结一下什么是 Maven。

    Maven就是一款管理和构建java项目的工具。


二、概述


2.1 介绍


前面已经有过介绍了,那么这里再简单描述一下 ~ ~ :

Apache Maven 是一个项目管理和构建工具,它基于项目对象模型 (Project Object Model , 简称: POM)

的概念,通过一小段描述信息来管理项目的构建、报告和文档。

官网:https://maven.apache.org/

a74ae829-1026-4dec-87d2-bc4bde6f9417
  • Maven 的作用:
    1. 方便的依赖管理
    2. 统一的项目结构
    3. 标准的项目构建流程

2.2 模型


  • 项目对象模型 (Project Object Model Pom)
  • 依赖管理模型 (Dependency)
  • 构建生命周期/阶段 (Build lifecycle & phases)

8fb49c08-5608-49fa-bd0b-c913e83258d0
  • 构建生命周期/阶段 (Build lifecycle & phases)

    • 图中的下半部分,就是用来完成标准化构建流程 。

      当我们需要编译,Maven 提供了一个编译插件供我们使用;

      当我们需要打包,Maven 就提供了一个打包插件供我们使用等。


  • 项目对象模型 (Project Object Model)
    • 就是将我们自己的项目抽象成一个对象模型,有自己专属的坐标,如下图所示是一个 Maven 项目:
7e5bffc0-4379-48fa-b9be-d70f678ec349
  • 坐标,就是资源 (jar 包) 的唯一标识,通过坐标可以定位到所需资源 ( jar 包) 位置。

    坐标的组成部分:

    • groupId : 组织名
    • arfitactId : 模块名
    • Version : 版本号

  • 依赖管理模型 (Dependency)
    • 就是使用坐标来描述当前项目依赖哪些第三方 jar 包
db194975-790e-4765-bcdc-a68c7fdbc3c0
  • 之前我们项目中需要 jar 包时,直接就把 jar 包复制到项目下的 lib 目录,

  • 而现在我们只需要在 pom.xml 中配置依赖的配置文件即可。

    而这个依赖对应的 jar 包其实就在我们本地电脑上的 maven 仓库中。


  • 如下图,就是一个示例的本地的 maven 仓库中的 jar 文件的样子:
8d6d08e1-c79d-4800-9197-ea1f7a9c4fd7

2.3 仓库


  • 仓库:用于存储资源,管理各种 jar 包

仓库的本质 : 就是一个目录 (文件夹),这个目录被用来存储开发中所有依赖 (就是 jar 包) 和插件


  • Maven 仓库分为:
    • 本地仓库:自己计算机上的一个目录(用来存储jar包)
    • 中央仓库:由 Maven 团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/
    • 远程仓库 (私服):一般由公司团队搭建的私有仓库

0b067a21-c23f-4f31-8fdb-fdd2273d542b

当项目中使用坐标引入对应依赖 jar 包后,

  • 首先会查找本地仓库中是否有对应的 jar 包
    • 如果有,则在项目直接引用
    • 如果没有,则去中央仓库中下载对应的 jar 包到本地仓库
  • 如果还可以搭建远程仓库(私服),将来 jar 包的查找顺序则变为: 本地仓库 --> 远程仓库--> 中央仓库

2.4 安装


认识了 Maven 后,我们就要开始使用 Maven 了,那么首先我们要进行 Maven 的下载与安装。


2.4.1 下载


txt
通过网盘分享的文件:apache-maven-3.9.4-bin.zip
链接: https://pan.baidu.com/s/1OiNEpkH3dFRdEUr9rJCvjw?pwd=nhhv 提取码: nhhv

2.4.2 安装步骤


  • Maven 安装配置步骤:
    • 解压安装
    • 配置仓库
    • 配置阿里云私服
    • 配置 Maven 环境变量

1). 解压下载好的 apache-maven-3.9.4-bin.zip

  • 建议解压到没有中文、特殊字符的路径下。
  • 如下图示例中解压到 D:\develop 下。
23893251-4d92-47b0-8663-0edd052aaa0a
  • bin 目录 : 存放的是可执行命令。(mvn 命令重点关注)
  • conf 目录 :存放 Maven 的配置文件。(settings.xml 配置文件后期需要修改)
  • lib 目录 :存放 Maven 依赖的 jar 包。(Maven 也是使用 java 开发的,所以它也依赖其他的 jar 包)

2). 配置本地仓库

  • 2.1). 在自己计算机上新一个目录(本地仓库,用来存储 jar 包)
00b62094-7f2d-41b4-9f3b-46dfaa29e4ad
  • 2.2). 进入到 conf 目录下修改 settings.xml 配置文件
    • 使用 超级记事本 (可以高亮代码部分的) 软件,打开 settings.xml 文件,定位到 53
    • 复制 <localRepository> 标签,粘贴到注释的外面(55行)
    • 复制之前新建的用来存储 jar 包的路径,替换掉 <localRepository> 标签体内容
04392fd3-fb1c-4b3e-b3c1-e7ae000e0695
3). 配置阿里云私服

  • 由于中央仓库在国外,所以下载 jar 包速度可能比较慢,

    而阿里公司提供了一个远程仓库,里面基本也都有开源项目的 jar 包。


  • 进入到 conf 目录下修改 settings.xml 配置文件:
    • 使用超级记事本 (可以高亮代码部分的) 软件,打开 settings.xml 文件,定位到 160 行左右
    • <mirrors> 标签下为其添加子标签 <mirror> ,内容如下:
xml
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
  • 注意配置的位置,在 <mirrors> ... </mirrors> 中间添加配置。如下图所示:
7456682f-7a2f-45a8-a2b8-fc81e46efa88
4). 配置环境变量

  • Maven 环境变量的配置类似于 JDK 环境变量配置一样

  • 4.1). 在系统变量处新建一个变量 MAVEN_HOME

    MAVEN_HOME 环境变量的值,设置为 maven 的解压安装目录

5b5e23d3-eafd-4ae7-afe5-e0d00d9e2b20
  • 4.2). 在 Path 中进行配置。 PATH 环境变量的值,设置为:%MAVEN_HOME%\bin
0d9f201c-d182-4a8a-b166-b6c8c115288d
  • 4.3). 打开 DOS 命令提示符进行验证,出现如图所示表示安装成功 。
    • 命令为 : mvn -v
391e2c4b-e0a8-45d3-8cfa-e2a712668095
5). 配置关联的JDK版本(可选)

  • 进入到 conf 目录下修改 settings.xml 配置文件,在 <profiles> </profiles>中增加如下配置:
xml
<profile>
        <id>jdk-17</id>
        <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>17</jdk>
        </activation>
        <properties>
                <maven.compiler.source>17</maven.compiler.source>
                <maven.compiler.target>17</maven.compiler.target>
                <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
        </properties>
</profile>

2.5 IDEA集成Maven


  • 我们要想在 IDEA 中使用 Maven 进行项目构建,就需要在 IDEA 中集成 Maven

    那么就需要在 IDEA 中配置与 maven 的关联。


2.5.1 创建Maven项目


2.5.1.1 全局配置

  • 进入 IDEA 的欢迎页面
    • 选择 IDEA中 File => close project => Customize => All settings
bf672b00-b951-4ad0-a9da-5c0d34c6ece1
41794d0c-08e8-4646-9ca1-be1a6031a883
  • 打开 All settings , 选择 Build,Execution,Deployment => Build Tools => Maven
39cc8294-4994-4041-942e-532debb2dade
  • 配置工程的编译版本为 17
6f20c26e-5a80-499e-8fb0-19caeeb6f7db

这里所设置的 maven 的环境信息,并未指定任何一个 project ,

此时设置的信息就属于全局配置信息。 以后,我们再创建 project ,默认就是使用我们全局配置的信息。


2.5.1.2 创建项目

  • 创建一个空项目,命名为 web-project01
d9c3f396-9b13-48e1-99bc-39fc2093ca43
  • 创建好项目之后,进入项目中,要设置 JDK 的版本号。选择小齿轮,选择 Project Structure
e91e1d88-6df9-47ff-b2e2-9c1647bc06d7
  • 创建模块,选择 Java 语言,选择 Maven。 填写模块的基本信息
28de59c9-3f2f-474f-88ec-18f7b8f4f15c
796a34d0-9ba5-4567-87c9-c154e7a9e42b
  • maven 项目中,创建 HelloWorld 类,并运行
388a554a-e24f-4823-81ab-e64cea50ef55
  • Maven 项目的目录结构 :
txt
maven-project01 :

        |---  src  (源代码目录和测试代码目录)
               |---  main (源代码目录)
                        |--- java (源代码java文件目录)
                        |--- resources (源代码配置文件目录)
              |---  test (测试代码目录)
                        |--- java (测试代码java目录)
                        |--- resources (测试代码配置文件目录)
        |--- target (编译、打包生成文件存放目录)

2.5.1.3 pom文件详解

POM (Project Object Model) :指的是项目对象模型,用来描述当前的 maven 项目。


  • 使用 pom.xml 文件来描述当前项目。 pom.xml 文件如下:
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>com.itheima</groupId>
    <artifactId>maven-project01</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <!-- 项目的JDK版本及编码 -->
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

  • 说明:

    • <project> :pom 文件的根标签,表示当前 maven 项目
    • <modelVersion>:声明项目描述遵循哪一个 POM 模型版本
      • 虽然模型本身的版本很少改变,但它仍然是必不可少的。目前POM模型版本是4.0.0
    • 坐标 :
      • <groupId> <artifactId> <version>
      • 定位项目在本地仓库中的位置,由以上三个标签组成一个坐标
    • <maven.compiler.source> :编译 JDK 的版本
    • <maven.compiler.target> :运行 JDK 的版本
    • <project.build.sourceEncoding> : 设置项目的字符集

2.5.2 Maven 坐标