Maven

环境准备:

需要检查Idea版本(社区版)是否在下面的范围内:

社区版:2021.1 ~ 2022.1.4

专业版:无要求

如果安装的idea不在这个范围内,需要卸载重新安装

卸载参考(一定要删除注册表):彻底卸载并重装IntelliJ IDEA指南-CSDN博客

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.
引用于 : 欢迎使用 Apache Maven -- Maveg
简单翻译下:Maven是一个项目管理工具,提供pom.xml文件的配置获取jar包,而不用手动地添加jar包。

1.2 为什么要学Maven

简单、方便、提高我们的开发效率,减少我们开发的Bug。

Maven提供的功能非常多,在后续的学习中体现在以下两个方面:

1、项目构建

2、管理依赖

1.3 创建Maven项目

Idea本身已经集成了Maven,我们可以直接使用,无需安装。

新建项目,将构建系统改为Maven,创建即可~

如图,就创建好了一个Maven项目:

1.4 Maven的核心功能

我们刚才提到过Maven在项目开发中的作用:

1、项目构建

2、管理依赖

1.4.1 项目构建

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

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

比如,点击package就可以完成项目的打包操作:

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

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

1.4.2依赖管理

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

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

比如在前面学习JDBC时,我们需要手动下载mysql-connector-java的包,并且添加到项目中。

如果使用Maven,我们只需要在pom.xml中引入mysql-connector-java的依赖就可以了。

1、使用<dependencies>打包依赖
XML 复制代码
<dependencies>
 <!--⾥⾯放置项⽬的依赖坐标, 可为多个 -->
</dependencies>
2、在pom文件的<dependencies>标签内,添加依赖坐标
XML 复制代码
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
</dependencies>

groupId:代表项目所属组织活分组,通常使用反向域名的形式。

artifactId:表示具体的项目或者模块名称。

version:指定该artifact的版本号。

3、点击刷新按钮,引入新加入的依赖jar包

刷新完之后就可以在项目中看到新加入的jar包:

依赖传递

细心的同学可能就发现了:怎么上面还有一个protobuf的包呢?

这是因为依赖传递。

早期我们没有使用maven时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下。比如 A 依赖B, B依赖C, 那么 A项目引入B 的同时, 也需要引入C, 如果我们手动管理这个依赖, 这个过程 就会比较麻烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的。

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

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

依赖排除

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

排除依赖:

指主动断开依赖的资源。(被排除的资源无需指定版本)

如下代码就是排除了spring framework的依赖。(即不使用spring framework的jar包了)

XML 复制代码
<!--排除依赖-->
 <exclusions>
 <exclusion>
 <artifactId>spring-jcl</artifactId>
 <groupId>org.springframework</groupId>
 </exclusion>
 </exclusions>
</dependency>

1.4.3 Maven Help插件

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

在项目创建页面,点击插件,搜索Maven Help,安装即可:

安装之后打开pom文件,就可以看到jar包之间的依赖关系。 还可以右键排除掉一些依赖。

1.5 Maven仓库

我们通过刚才短短几行代码,就把依赖的jar包放在了项目里,具体是怎么做到的呢?

XML 复制代码
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.30</version>
</dependency>

这个代码我们称之为"坐标",也就是唯一的(根据我们刚才所讲的groupId、artifactId和version的配置来识别),当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找Jar包,并把它下载下来,添加到项目中。这个Jar包下载的地方就称为仓库

Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包, 插件等)(可以理解为:菜鸟驿站)。
Maven仓库可以分为两大类:本地仓库远程仓库。 其中远程仓库又分为中央仓库私服和其他公共库。

1.5.1 本地仓库

本地仓库:自己计算机上的一个目录(用来存储jar包)

当项目引入了对应依赖的jar包之后,首先会在本地仓库中是否有对应的jar包:如果有,就会在项目中直接引用,如果没有才会去中央仓库下载对应的Jar包。

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

该仓库的目录最开始是空的,随着Maven的使用,该仓库下的文件会越来越多。

1.5.2 中央仓库

中央仓库:maven软件中内置的一个远程仓库地址,服务于整个互联网。由Maven团队维护,全球唯一。(由于该仓库在国外,访问速度较慢)。

仓库地址:Central Repository: (maven.org)

如果觉得查找jar包麻烦,我们也可以通过下面的网址来查找jar包的坐标:Maven 存储库:搜索/浏览/探索 (mvnrepository.com)

例如:查找mysql:

选择要添加的Jar包版本(这里最好选择次新的、使用人数多的、无漏洞的):

查看Jar包对应坐标:

1.5.3 私有服务器(私服)

私服:一般由公司团队搭建的私有仓库。属于某个公司,或者某个部门,往往需要一定的权限。

有了私服之后,Maven依赖下载的顺序又发生了变化。

当Maven需要下载资源的时候:

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

2、如果本地仓库没有,就从私服找,找到了就返回。

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

4、如果中央仓库中存在,就先缓存到私服上之后,再缓存到本地仓库里,再为Maven的下载请求服务。(由于私服是很多人使用的,所以只需要第一个使用者下载一次就可以了,因此进入公司就可以找前辈要公司私服的权限)。

1.6 Maven设置国内源

因为中央仓库在国外,所以下载起来比较慢,所以咱们选择借助国内一些公开的远程仓库来下载资源(如:阿里云、华为云......)。

1.6.1 配置设置文件和本地仓库

1、先在D盘新建一个maven文件夹.

2、在C盘中查找本机Maven仓库的地址 (一般为C:/用户./UserName./m2),将它复制粘贴到我们刚才的Maven文件夹中。

3、 配置Setting文件,如果没有可以去博主的码云中复制一份,然后粘贴到自己的文档编辑器中,保存到刚才的Maven即可。

Setting文件地址:setting.xml · 寻梦缘/Maven配置文档 - 码云 - 开源中国 (gitee.com)

4、在idea中配置本地仓库和setting文件 (选择我们刚才D盘中Maven文件夹的路径即可)

相关推荐
兩尛2 分钟前
Spring面试
java·spring·面试
Java中文社群9 分钟前
服务器被攻击!原因竟然是他?真没想到...
java·后端
Full Stack Developme20 分钟前
java.nio 包详解
java·python·nio
零千叶37 分钟前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝1 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
li3714908901 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
摇滚侠1 小时前
Spring Boot 项目, idea 控制台日志设置彩色
java·spring boot·intellij-idea
Aevget2 小时前
「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
java·ide·java-ee·eclipse·myeclipse
黄昏晓x2 小时前
C++----多态
java·jvm·c++
Brookty2 小时前
【算法】前缀和
java·学习·算法·前缀和·动态规划