String Boot 入门——Maven

1. Maven

1.1 什么是 Maven

官方对于 Maven 的描述:

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

引用自:https://maven.apache.org/index.html

翻译过来就是:

Maven 是一个项目管理工具。基于 POM(ProjectObjectModel,项目对象模型)的概念,Maven 是可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

说人话就是:Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar 包

1.2 为什么用 Maven

一句话:简单、方便、提高我们的开发效率,减少我们的开发 Bug

Maven 提供的功能非常多,Maven 在本文中的主要体现是以下两个方面:

  1. 项目构建
  2. 管理依赖

1.3 创建一个 Maven 项目

1.4 Maven 核心功能

Maven 提供了标准的,跨平台(Linux、Windows、MacOS等)的自动化项目构建方式

当我们开发了一个项目之后,代码需要经过编译、测试、打包、发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得特别麻烦,而 Maven 给我们提供了一套简单的命令来完成项目的构建

点击 package 就可以完成项目的打包操作

打包就是把所有的 class 文件,全部放在一起,打成 jar 包或 war 包

jar 包和 war 包都是⼀种压缩文件

jar 包就是把开发人员已经写好的一些代码进行打包,打好的 jar 包就可以引入到其他项目中,也可以直接使用这些 jar 包中的类和属性。另外也可以打成可执行 jar 包,这样的包就可以通过 java- jar 命令来执行 war 包可以理解为是一个 web 项目,里面是项目的所有东西,通常用于网站

1.5 依赖管理

上面说到 Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar 包,获取到的 jar 包,其实就是依赖

pom.xml 就是 Maven 的配置文件,用以描述项目的各种信息

1.5.1 依赖配置

依赖:指当前项目运行所需要的 jar 包。比如前面学习 JDBC 时,我们需要手动下载 mysql-connector-java 的包,并且添加到项目中。 如果使用 Maven,我们只需在 pom.xml 中引入 mysql-connector-java 的依赖就可以了。

<dependencies>
    <!-- ⾥⾯放置项⽬的依赖坐标, 可为多个 --> 
</dependencies>

1. 在 pom 文件 <dependencies> 标签内,添加依赖坐标

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
    </dependencies>

2. 点击刷新按钮,引入新加入的依赖 jar 包

后续有添加新的 jar 包,或者修改 jar 包版本,都需要通过该方式在项目中添加依赖

3. 刷新之后,就可以在项目中看到新加入的 jar 包,如上图

1.5.2 依赖传递

早期我们没有使用 maven 时,向项目中添加依赖的 jar 包,需要把所有的 jar 包都复制到项目工程下。

比如 A 依赖 B,B 依赖 C,那么 A 项目引入 B 的同时,也需要引入 C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。

比如我们要吃火锅,需要有锅,有调料,有食材,以及确认什么样的锅,什么样的食材。

比如去医院看病,需要带上以往的病历,检查结果,处方等,并且要确认带的资料是正确的,如果日期错了,或者患者错了,带少了,就需要回去重新拿。

但使用 maven 的话,就可以避免管理所需依赖的关系。我们只需要在 pom 文件中,定义直接依赖就可以了,由于 maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也一起导入。

比如吃火锅,现在我们可以点一个海底捞外卖,直接就把所有食材都送过来了,包括什么锅,配什么菜。
比如去医院看病,借助 “互联网”,实现了信息共享,只需要带上身份证,以往的病历和检查结果就都可以看到了。

如上图,项目 A 通过 Maven 引入 JarA 时,会自动引入 JarB 和 JarC。
Jar A 和项目 B 就是项目 A 的直接依赖。
Jar B,Jar C 是间接依赖。

直接依赖:在当前项目中通过依赖配置建立的依赖关系。
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。

上面的依赖配置中

1.5.3 依赖排除

当前阶段我们需要依赖的库并不多,但随着项目的越来越复杂,库之间的依赖关系也会变得越来越复杂。如上图中,如果项目 A 不需要 JarB,也可以通过排除依赖的方式来实现。

排除依赖:
指主动断开依赖的资源。(被排除的资源无需指定版本)
比如,我下了一个快递单子,默认会有一个服务,就是快递小哥会上门取件,但是我刚好要出门,而且顺路经过站点,也可以选择自己送过去。

上面例子 mysql 中,排除 goole 的代码:

更方便的方法是利用插件来进行依赖排除

maven 还有一些功能是依赖调解、可选依赖等。

依赖调解:当项目中的依赖存在依赖冲突时,例如存在这样的依赖:

A->B->C->X(1.0)

A->D->X(2.0)

Maven 会采用最短路径优先的原则去选择依赖,这里 2 的依赖路径更短,所以会选择X(2.0),当然我们也可以选择指定某个依赖的版本。

当然也可以指定X的版本。

1.5.4 Maven Help 插件

当项目比较复杂时,我们就会有 Jar 包冲突的问题,这时候就需要去解决依赖冲突,解决冲突之前,需要先找到冲突,我们可以使用 Maven Helper 插件来观察包和包之间的依赖关系

理解"插件"(plugin)

天火+擎天柱=>会飞的擎天柱。

天火在牺牲之前把自己变成了擎天柱的“飞行插件”。在擎天柱需要起飞的时候就变成翅膀装在擎天柱身上。不需要起飞的时候就卸下来放到擎天柱的集装箱里。

程序开发的时候也经常如此。

像 IDEA 这样的程序虽然功能强大,但是也无法面面俱到。对于一些特殊场景的功能,开发者就可以开发一些“插件”。如果需要这个插件,就单独安装。

插件就是对程序的一些特定场景,做出一些特定的功能的扩展。

安装插件:File -> Settings -> Plugins -> 搜索 "Maven Helper" -> 找到对应插件,点击 Install 安装即可,安装后需重启 idea 生效

如果像上图一样搜索不出来,下载不了,请移步这位大佬的解决方案:idea 插件下载不了

安装之后,打开 pom 文件,可以看到 Jar 包之间的依赖关系:

也可以右键排除掉一些依赖

1.6 Maven 仓库

通过短短几行代码就可以把依赖 jar 包放到项目里,主要就是依靠以下代码

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

这个代码,我们称之为 “坐标”,是唯一的

在 Maven 中,根据 groupld、artifactld、version 的配置,来唯一识别一个 jar 包,缺一不可

当我们在 pom 文件中配置完依赖之后,点击刷新,Maven 会根据坐标的配置,去仓库里寻找 jar 包,并把他下载下来,添加到这个项目中,这个 Jar 包下载的地方就称为仓库

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

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

Maven 仓库分为两大类:本地仓库和远程仓库,其中远程仓库又分为中央仓库,私服和其他公共库

1.6.1 中央仓库

中央仓库:Maven 软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网,由 Maven 团队维护,全球唯一

仓库地址:https://repo1.maven.org/maven2/

可以通过 Maven Repository: Search/Browse/Explore (mvnrepository.com) 这个网站来查询并下载

查找 Jar 的坐标:

1. 访问 Maven Repository: Search/Browse/Explore (mvnrepository.com)

2. 进行查找,如 mysql

3. 选择要添加的 Jar 包版本

4. 查看 Jar 包对应坐标

1.6.2 本地仓库

自己计算机上的一个目录(用来存储 Jar 包)

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

  • 如果有,则在项目中直接引用
  • 如果没有,则去中央仓库中下载对应的 Jar 包到本地仓库

本地仓库地址可以通过 Maven 配置查看

File -> Settings

查看该仓库目录,可以看到该目录下很多 Jar(最开始是空的,随着 Maven 的使用,该仓库下文件会越来越多)

1.6.3 私有服务器,也称为私服

一般由公司团队搭建的私有仓库

私服属于某个公司或某个部门,往往需要一定的权限

有了私服之后,Maven 依赖下载的顺序又发生了改变,当 Maven 需要下载资源时:

1. 先从本地仓库获取,本地仓库存在,则直接返回

2. 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回

3. 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在就报错

4. 如果中央仓库存在,就先缓存到私服上,然后再缓存到本地仓库里,再为 Maven 的下载请求提供服务(私服是很多人在使用的,所以只需要第一个使用者下载一次就可以了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值