【SSM-Day1】Maven:构建项目/管理依赖


1. 初见maven

maven的官方网站:https://maven.apache.org/index.html
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是一个软件项目管理工具。基于项目对象模型(POM)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档

2. maven在网站项目中的应用

我们写个网站,只用到jdk里面的基础类库是远远不够的,还会用到各种各样的第三方库等等。想要在代码中直接调用第三方库的功能接口,就需要在项目中导入第三库包的依赖。

什么依赖?在一个开发过程项目中,需要用到的所有的外部资源都是依赖。

在一个网站项目中使用maven,maven可以助我们构建,打包项目;简化导依赖的过程;并且帮我们管理依赖
(ps:maven在网站项目中主要有以上作用,maven在其他场景中还有很多其他功能!)

任何一个java程序,都可以用maven来管理!

3. maven和idea的关系

maven和idea是两个独立的东西,但是idea里面集成了maven
什么意思呢,我们都用12306订过车票吧,12306是一个订车票系统,但是现在在12306里面还能点外卖。idea里面集成了maven,就相当于12306里面集成了一个外卖系统。

4. maven的使用

在网站项目开发中,maven有两个核心功能,分别是项目构建和管理依赖。

4.1 项目构建

4.11 在idea创建maven项目

由于idea社区版本(2021.1~2022.1.4)在创建maven项目的时候,存在一个不稳定复现的bug,也就是直接通过new创建maven项目,idea可能会卡死:
在这里插入图片描述
所以我们通过先Close Project->再New Project的方式创建maven项目。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述项目创建成功后,idea的右侧会出现一个maven选项。
在这里插入图片描述项目创建后,如果没有在idea右侧看到maven选项,先鼠标右键->然后在弹出的选择列表中选中AFS->OK
在这里插入图片描述在这里插入图片描述

maven项目创建成功后,会生成一系列的目录结构:
在这里插入图片描述

4.12 利用maven命令打包项目

当我们开发了一个项目后,代码需要经过编译,测试,打包,发布等流程。麻烦的是,只要修改代码,都要把上述流程再经历一遍,如果代码反复调试修改,这个流程也要反复进行。但是maven给我们提供了一套简单的命令来帮助我们进行上述流程。

以下都是maven命令:
在这里插入图片描述clean命令:删除target 目录及内容
package命令:打包
install命令:发布包到本地
deploy命令:发布包到远程仓库

maven的package命令:打包。把java工程打成jar包,把web工程打成war包。

什么是jar包?什么是war包?jar包和war包都是一种压缩文件。打成jar包是把项目中的一些代码进行打包,打好的jar包可以引入到其他项目中,直接使用jar包中的类和属性。也可以打成可执行jar包,可执行jar包可以通过java -jar命令执行。打成war包是把项目中的所有东西进行打包,统称用于网站项目。

例如:把maven_demo1项目中的所有class文件打成jar包。
在这里插入图片描述
在这里插入图片描述maven的clean命令:删除target 目录及内容。
在这里插入图片描述

4.2 依赖管理

依赖通常就是一个jar包。maven的主要功能就是帮我们简化导依赖的过程,并且帮我们管理依赖。

4.21导入依赖

在项目中导入依赖,如果不用maven的话,我们需要先下载jar包->然后手动添加jar包到项目中。

如何用maven导入依赖?
用maven构建项目后,项目中有一个pom.xml文件。pom.xml是Maven的配置文件,用于描述项目的各种信息。
在这里插入图片描述

用maven导入依赖,可以通过修改pom.xml文件的配置直接获取到jar包,然后自动下载到本地,并添加搭配项目中。所以我们只做一件事:根据具体需要,修改pom.xml文件的配置即可

如何根据具体需要,修改pom.xml文件的配置项?导入哪个依赖,就在pom.xml文件内的dependencies双标签内添加该依赖的坐标。

什么是依赖的坐标?依赖在maven仓库中的位置。

不知道依赖坐标的情况下,如何得到要导入的依赖坐标?到maven中央仓库查询界面中搜索寻找该依赖->进一步得到依赖坐标。maven中央仓库查询界面:https://mvnrepository.com/。

<!-- pom.xml文件内没有看到dependencies双标签,就自己写一个--> 
<dependencies>
 <!--⾥⾯放置项⽬的依赖坐标, 可为多个 --> 
</dependencies>

总结:如何用maven在项目中导入依赖?先在pom.xml文件内的dependencies双标签内添加具体的依赖坐标 ->然后点击刷新按钮

例如,用maven在项目中导入mysql8.0依赖:
在这里插入图片描述
在这里插入图片描述

4.22 管理依赖:

用maven在项目中导入所需的依赖后,maven是如何帮我们管理依赖的呢?

依赖传递

在上面导mysql8.0.30依赖的时候,我们只在pom.xml文件中添加了mysql依赖的坐标,但是实际导入到项目中的依赖却有两个:
在这里插入图片描述这是因为mysql依赖中还用到了protobuf依赖,maven帮我们导入mysql8.0.30依赖的时候,会自动把mysql.0.30依赖中用到的依赖也帮我们导入到项目中。
如果我们手动导入mysql依赖,意味着我们必须要清楚mysql依赖中用到了哪些依赖,这些依赖版本间又有什么联系,然后再把它们依次手动导入到项目中,显然这是非常麻烦的。
但是由于maven的依赖具有传递性,我们只需要导入直接依赖就行了。

什么是直接依赖?如图,项目A通过maven引入了两个依赖,分别是项目B和JarA。此时,项目B和JarA就是项目A的直接依赖。引入JarA依赖的时候,因为依赖传递,又自动引入了JarB和JarC,JarB和JarC就是项目A的间接依赖。
在这里插入图片描述

用Maven Helper插件查看依赖关系

什么是插件:一个插拔式的工具。这个工具把具体某个辅助功能集成在一起。用的时候通过连接就能用,不用的时候断开连接就用不了。比如耳机,U盘,一段代码等都可以理解成一个插件。

下载Maven Helper插件:
在这里插入图片描述在这里插入图片描述

插件下载好以后点击ok,然后重启idea。

然后在pom.xml文件的Dependency Analyzer页就可以看到项目的依赖关系了。
在这里插入图片描述

5. maven仓库

maven仓库分为本地仓库和远程仓库,远程仓库又分为中央仓库,私有仓库(私服)和其他公开开库。

5.1 本地仓库

maven会在本地创建一个目录,这个目录就是本地仓库的位置。当我们用maven成功把jar包导入到项目中后,意味着在本地下载了这个jar包,并把它保存到在maven本地仓库中

maven本地仓库本来是空的,随着maven的使用,该仓库下文件会越来越多。

5.11 如何查看maven本地仓库的位置?

在这里插入图片描述

在这里插入图片描述

5.12 如何查找依赖在本地仓库中的位置?

如果把仓库比喻成菜鸟驿站,那么仓库里存放的依赖就是包裹,依赖坐标就是包裹的取件码。
在这里插入图片描述在这里插入图片描述

5.2 远程仓库

远程仓库中包括中央仓库,私有仓库(私服),其他公开库。

5.21 中央仓库

中央仓库中存放着最全的我们在开发过程中可能需要的依赖。maven中央仓库全球只有一个,由maven团队统一维护,服务于整个互联网。
maven中央仓库地址:https:/repo1.maven.org/maven2
maven中央仓库查询界面:https://mvnrepository.com/
查询界面中的依赖虽然具有一定的滞后性,但我们通常还是从查询界面中查询依赖坐标并下载依赖。

在中央仓库中查找依赖坐标

以查找mysql为例:
进入maven中央仓库查询界面:https://mvnrepository.com/,进行搜索查找
在这里插入图片描述选择要添加的jar包版本
在这里插入图片描述查看jar包对应坐标
在这里插入图片描述

5.22 国内源

国内源属于一种公开库。因为maven中央仓库在国外,国内访问时比较慢,为了在国内也能快速访问到资源,所以国内有些人/团队就搞了国内版本的中央仓库,内容和maven中央仓库几乎一样,而且也公开,这就是国内源。常见的国内源有阿里云仓库,华为仓库等。

设置国内源

如何使用国内源?为当前项目配置国内源->为新项目配置国内源。

国内源的配置文件是settings.xml,所以我们要在本地maven中找到这个文件。

以下是为我本机的当前项目配置阿里云仓库:
在idea中查找settings.xml文件在本机的位置,不同电脑中settings.xml文件路径不同,以我本机为例:
在这里插入图片描述在这里插入图片描述在文件资源管理器打开settings.xml文件,在mirrors节点上,添加内容如下:

<mirror>
 <id>aliyunmaven</id>
 <mirrorOf>central</mirrorOf>
 <name>阿⾥云公共仓库</name>
 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 </mirror>

如果在文件资源管理器对应路径下没有找到settings.xml文件,可以把别人已经配置好国内源的settings.xml文件直接cv到本机路径下。
在这里插入图片描述以上完成了为本机的当前项目配置阿里云仓库。在之后的项目中,如果依然需要使用阿里云仓库,在新项目中确认一下settings文件的路径即可。
在这里插入图片描述

5.23 私服

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

如何使用私服,同使用国内源一样,也是通过settings.xml文件进行配置的。

6 再看用maven导入依赖并解决报错:Dependency ‘依赖:依赖坐标’ not found

从上文可以得知如何用maven在项目中导入依赖:先在pom.xml文件内的dependencies双标签内添加具体的依赖坐标 ->然后点击刷新按钮。

如果机器上能访问本地仓库,中央仓库(国内源),点击刷新按钮后,
maven会(自动)先去本地仓库中查找是否有依赖坐标对应的jar包,如果有,则(自动)导入到项目中。如果没有,则(自动)去中央仓库(/国内源)中下载对应的jar包到本地仓库,然后再(自动)导入到项目中。

在这里插入图片描述

如果机器上不但能访问本地仓库,中央仓库(国内源)还能访问私服的话,点击刷新按钮后,
maven会(自动)先去本地仓库中查找是否有依赖坐标对应的jar包,如果有,则(自动)导入到项目中。**如果本地仓库没有,就从私服请求,私服存在该资源,则(自动)导入到项目中
**如果私服上不存在该资源,则从中央仓库(/国内源)下载,中央仓库不存在,就报错了。
如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库⾥,最后再为Maven的下载请求提供服务

所以,当用maven导入依赖时,出现报错:Dependency ‘mysql:mysql-connector-java:8.0.32’ not found 的原因是,maven本地仓库(/私服)中不存在依赖mysql:mysql-connector-java:8.0.32,此时短暂的报错意味着maven正在从中央仓库中(或国内源)下载这个依赖到本地仓库,等待片刻后下载完成,报错也会自动消失。

在这里插入图片描述
等待片刻后,依赖mysql:mysql-connector-java:8.0.32成功导入到项目中。
在这里插入图片描述如果等了很久包还是没下载下来,要不然网络的问题,要不然中央仓库中不存在这个包。
确认网络,去中央仓库检查这个包有没有,包有,多次下载。只有中央仓库有这个包,肯定是能导入进来的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值