跳到主要内容
关系图

Maven基础

课程目标

  • 了解maven的基本简介
  • 掌握maven的下载、安装流程
  • 理解maven的基本概念(重点)
  • 动手完成第一个maven项目(重点)
  • 理解依赖管理(重点)
  • 理解生命周期与插件

Maven简介

传统构建java项目的弊端​

在项目中我们不可避免的要用到一些jar包。这种手动导入jar包的端:

  1. 需要提前准备很多jar包,非常的繁琐
  2. jar包与jar包之间存在版本冲突的问题,要求我们手动收集的jar包版本之间必须兼容。
  3. 导入很多jar包之后的项目变得庞大,不利于后期的部署和维护。

解决方案: 使用 Maven

什么是maven​

Maven 的正确发音是[ˈmevən]。Maven 在美国是一个口语化的词语,代表专家、内行的意思。

一个对 Maven 比较正式的定义是这么说的:

  • Maven 是一个项目管理工具,
    • 它包含了一个项目对象模型 (POM: Project Object Model),
    • 一组标准集合,
    • 一个项目生命周期(Project Lifecycle),
    • 一个依赖管理系统(Dependency Management System),
    • 和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
##container##
Clip_2024-04-01_10-15-28.png ##w600##

Maven的作用​

  1. 我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用 到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。

  2. 世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。

  3. 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。

试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar 包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会心动吗? Maven 就可以解决上面所提到的这些问题

##container##
Clip_2024-04-01_10-18-53.png ##w700##
  1. 统一开发结构,提供标准了、统一的项目结构
##container##
Clip_2024-04-01_10-29-49.png ##w700##

maven的下载安装

maven的下载​

官网: maven

注意:不同的MAVEN版本,跟IDEA之间也存在适配问题,所以大家在选择 maven 版本的时候,应该根据自己IDEA的版本选择对应的适配版本,适配版本如下

  • IDEA 2022 兼容maven 3.8.1及之前的所用版本
  • IDEA 2021 兼容maven 3.8.1及之前的所用版本
  • IDEA 2020 兼容Maven 3.6.3及之前所有版本
  • IDEA 2018 兼容Maven3.6.1及之前所有版本

在MAVEN官网 http://maven.apache.org/docs/history.html 查找发布时间在IDEA版本之前的

我使用的是 IDEA 2023 所以直接下载 maven 3.9.6

Maven的安装​

Maven 下载后,将 Maven 解压到一个 没有中文没有空格 的路径下, 比如: D:\MyApp\apache-maven-3.9.6

其目录结构为

apache-maven-3.9.6
├─bin
├─boot
├─conf
│ └─logging
└─lib
├─ext
│ ├─hazelcast
│ └─redisson
└─jansi-native
└─Windows
├─x86
└─x86_64
cmd
  • bin: 存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run
  • boot: 存放了一些 maven 本身的引导程序,如类加载器等
  • conf: 存放了 maven 的一些配置文件,如 setting.xml 文件
  • lib: 存放了 maven 本身运行所需的一些 jar 包 至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。

maven及JDK的配置​

我们所使用工具软件的统一,JDK 使用 JDK8 版本。

  • JDK1.8版本安装之后,JDK配置 JAVA_HOME
##container##
Clip_2024-04-01_10-56-46.png ##w600##
  • 配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录)
##container##
Clip_2024-04-01_10-58-08.png ##w700##
  • 在环境变量的path目录里面还需要配置
##container##
Clip_2024-04-01_10-59-57.png ##w600##

通过 mvn -v 命令检查 maven 是否安装成功:

C:\Users\Heng_Xin>mvn -v
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: D:\MyApp\apache-maven-3.9.6
Java version: 1.8.0_171, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_171\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
cmd

看到 maven 的版本为 3.9.6 及 java版本为 1.8 即为安装成功。

maven的基本概念

仓库​

maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A、项目 B 等都会通过 maven 软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库就是本地文件夹,当第二次需要此 jar 包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

##container##
Clip_2024-04-01_11-20-52.png ##w700##
上图描述了maven仓库的类型
  • 本地仓库: 用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,manen项目优先从本地仓库查找 默认本地仓库位置在${user.dir}/.m2/repository,${user.dir}表示 windows 用户目录。
##container##
Clip_2024-04-01_11-22-40.png ##w600##
  • 远程仓库(私服): 如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。

  • 中央仓库: 在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件

设置本地仓库路径​

注意: 默认本地仓库在系统磁盘中,比较浪费系统盘空间,所以我们可以修改本地仓 库的默认存放位置。

我打算放在D:\MyApp\apache-maven-3.9.6\java_repository

在%MAVE_HOME%/conf/settings.xml文件中配置本地仓库位置(maven 的安装目录下) 打开 settings.xml 文件,配置如下:

##container##
Clip_2024-04-01_11-30-56.png ##w600##
配置本地仓库路径

配置镜像仓库​

解决中央仓库资源下载慢的问题(因为是外网嘛~)

  • 在settings.xml配置文件中,配置阿里云镜像仓库

注意: 请放在<mirrors>块里面

<mirror>
<!-- mirror -->
<id>nexus-aliyun</id>
<!-- -->
<mirrorOf>central</mirrorOf>
<!-- 名称 -->
<name>Nexus aliyun</name>
<!-- URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
xml

坐标​

什么是坐标?​

maven中的坐标用于描述仓库中资源的位置。

Maven坐标的主要构成​

<dependency>
<groupId></groupId> <!--描述当前依赖隶属于的组织名称,通常的写法格式是域名的小写。如: org.mybatis-->
<artifactId></artifactId> <!--描述的是当前依赖的工程名称-->
<version></version> <!--描述的依赖的版本号-->
<packing></packing> <!--描述当前依赖的打包方式默认不写打jar包 也可以打war包pom包-->
<scope></scope> <!--描述当前依赖的作用域-->
</dependency>
xml

Maven坐标的作用​

使用唯一标识,用来定位资源。通过该标识可以将资源的识别与下载交给机器完成。

请作者喝奶茶:
Alipay IconQR Code
Wechat IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...