一.概述

1.关于

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

基于项目对象模型(Project Object Model , 简称: POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

2.功能

(1)依赖管理

可以通过配置maven项目的pom.xml文件即可

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

(2)统一项目结构

① 概述

不同的编辑器会有不同的目录,而Maven提供标准、统一的项目结构。方便项目可以在不同编辑器中无缝切换

image-20221130140132209

(3)项目构建

maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式,让我们可以用一套简单的命令来完成项目的构建

提供的功能:

  • 清理
  • 编译
  • 测试
  • 打包
  • 发布

image-20221130222907628

3.Maven模型

① 项目对象模型
Ⅰ.概述

可以通过pom.xml中的简单描述信息描述项目对象工程,将我们自己的项目抽象成一个对象模型,有自己专属的坐标

Ⅱ.坐标

坐标由,,组成

例如:

 
      junit
      junit
      3.8.1

image-20221130142643255

② 依赖管理模型

可以通过编辑pom.xml,使用坐标描述当前项目依赖哪些第三方依赖,使其可以自动导入

③ 构建生命周期/阶段

通过提供各种插件来完成项目的构建

image-20221130142100703

4.Maven仓库

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

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

(1)分类

Maven仓库分为:

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

image-20220616095633552

(2)查找顺序

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包

  • 如果有,则在项目直接引用

  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库

如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为: 本地仓库 --> 远程仓库--> 中央仓库

二.安装

三.IDEA集成Maven

1.配置Maven环境

(1)Idea配置Maven信息

一定要回到Idea的主界面去配置,因为这样是全局配置,可以一劳永逸。

回到Idea的主界面点击自定义 -> 所以设置 -> Maven进行配置

配置下面的信息

  • Maven主路径
    • Maven的安装路径
  • 用户配置信息
    • 安装路径 -> conf -> settings.xml
  • 本地仓库
    • 手动创建的,一般设置到Maven安装目录下即可

image-20240129185050141

2.Maven项目

(1)新建项目

这是Maven的默认Archetype,它会生成一个简单的Maven项目结构,包含一个Java源代码目录、一个资源目录以及必要的Maven配置文件。(自定义好复杂,暂时不玩先)

设置Archetype时直接下拉选择org.apache.maven.archetypes:maven-archetype-quickstart即可

image-20240129185500886

(2)目录结构

目录说明:

  • src/main/java: java源代码目录
  • src/main/resources: 配置文件信息(需手动创建)
  • src/test/java: 测试代码
  • src/test/resources: 测试配置文件信息(需手动创建)
  • target:编译、打包生成文件的目录(第一次编译后出现)
image-20240129192221738

3.Pom的配置

POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。通过使用pom.xml实现

(1)pom文件详解

  • :pom文件的根标签,表示当前maven项目
  • :声明项目描述遵循哪一个POM模型版本
    • 虽然模型本身的版本很少改变,但它仍然是必不可少的。目前POM模型版本是4.0.0
  • 坐标 :
    • 定位项目在本地仓库中的位置,由以上三个标签组成一个坐标
  • :maven项目的打包方式,通常设置为jar或war(默认值:jar)
① 坐标
Ⅰ.概述

资源,可以是插件、依赖、当前项目

  • Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置
  • 可以使用坐标来定义项目或引入项目中需要的依赖
Ⅱ.坐标的组成
  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.honestliu)
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
  • version:定义当前项目版本号

使用坐标表示logback:


      ch.qos.logback
      logback-classic
      1.2.11

四.依赖管理

1.依赖配置

就是当我们需要用到第三方包的时候的导入的包

依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖

(1)配置过程

① 找到坐标
  1. 利用中央仓库搜索的依赖坐标,到mvn的中央仓库(https://mvnrepository.com/)中搜索

  2. 利用IDEA工具搜索依赖,利用Alt + Insert快捷键,在弹出的工具狂里面搜索

  3. 熟练上手maven后,快速导入依赖

    简单说,就是用到Idea都记住你会调用什么依赖的时候,就会直接提示你了。

② 通过坐标添加

添加步骤:

1.到Maven项目的pom.xml文件中的既有的下,将下面的坐标信息进行添加

示例坐标:


      ch.qos.logback
      logback-classic
      1.2.11

2.点击右上角的悬浮窗image-20240129175150807,重新加载Maven项目即可

  • 之后就可以在右侧Maven菜单栏中看到自动添加进来的logback依赖了

image-20240129193734313

2.依赖传递

(1)概述

有些依赖(jar包)也是要依赖其它jar包的,所以在使用它们的时候往往要把其本体及其依赖的jar包一并导入到项目中

(2)分类

  1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系

  2. 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

image-20240129195833670

(3)Maren中的依赖传递

① 体现

在Maren中,添加依赖配置的时候可以只添加目标要使用的依赖,而不必考虑其本身依赖的其它jar包。

② 原理

Maren导入依赖的时候,会把其所依赖的其它jar包也一起进行导入

例如:在pom.xml文件中只添加了logback-classic依赖,但由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入。

image-20240129193734313

3.排除依赖

(1)概述

依赖具有传递性,但有时候传递过来的依赖是我们不需要的,此时就可以尝试将其进行排除操作了

**排除依赖:**指主动断开依赖的资源。

(2)格式

下的内添加要排除的依赖资源的坐标(被排除的资源无需指定版本)


    com.honestliu
    maven-projectB
    1.0-SNAPSHOT
   
    
    
    	
            junit
            junit
        
    

(3)例子

maven-projectA依赖了maven-projectB,maven-projectB依赖了Junit。基于依赖的传递性,所以maven-projectA也依赖了Junit

image-20221201141929240

使用排除依赖后

image-20221201142501556

4.依赖范围

(1)概述

默认情况下,在项目中导入依赖的jar包后,是可以在任意地方使用的

(2)限制范围

将其添加到要限制访问范围的依赖pom配置里面

限制标签: scope值

不同scope标签表示的访问范围:

  1. 主程序范围(main文件夹范围内)

  2. 测试程序范围(test文件夹范围内)

  3. 是否参与打包运行(package指令范围内)

scope 主程序 测试程序 打包(运行) 范例
compile(默认) Y Y Y log4j
test - Y - junit
provided Y Y - servlet-api
runtime - Y Y jdbc驱动

(3)例子

给junit依赖通过scope标签指定依赖的作用范围是test,则其只能在test目录下的测试代码中使用了


    junit
    junit
    3.8.1
    test

5.生命周期

(1)概述

**项目构建的生命周期:**是一个项目从概念到完成所经过的所有阶段

(2)Maven的生命周期

① 概述

Maven就是一个插件的框架

Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。

在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。

image-20221130142100703

② 划分
Ⅰ.简述

Maven对项目构建的生命周期划分为3套==(相互独立)==:

  • clean:清理工作。

  • default:核心工作。如:编译、测试、打包、安装、部署等。

  • site:生成报告、发布站点等(少用)

Ⅱ.各周期完整阶段

image-20220616124348972

Ⅲ.常用的生命阶段

Clean生命周期:

  • clean:移除上一次构建生成的文件

default生命周期

  • compile:编译项目源代码
  • test:使用合适的单元测试框架运行测试(junit)
  • package:将编译后的文件打包,如:jar、war等
  • install:安装项目到本地仓库
③ 使用生命周期

注意:在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。

Ⅰ.Idea的Maven工具栏

IDEA右侧的maven工具栏中,已给出快速访问通道

image-20240129205150810
Ⅱ.命令行中执行

在项目目录下执行Maren指令一样可以使用对应的生命周期

命令:mvn 生命周期名称

image-20221201172914648

五.附录

1.更新Maven仓库信息

有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下:

打开设置----搜索maven----Repositories----选中本地仓库-----点击Update

1537786634456

最后修改:2024 年 01 月 29 日
如果觉得我的文章对你有用,请随意赞赏