目录

SpringBoot深入解析-Maven-的操作与配置

【SpringBoot】深入解析 Maven 的操作与配置

https://i-blog.csdnimg.cn/direct/a9d3553301c848ff9cad6aa4116248ea.gif#pic_center

https://i-blog.csdnimg.cn/direct/bef8687d052c4e999f4e0778d7fbf010.png

https://i-blog.csdnimg.cn/direct/cd5abfb0ba1c49128b69f4ebb5922bac.gif#pic_center


Maven


1.什么是Maven?


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


2. 创建一个Maven项目


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

以下截图的idea版本为: 2022.1.4 ,不同版本的 idea 界面展示会有所不同

File -> New-> Project

https://i-blog.csdnimg.cn/direct/aebac4e9f56c4cddb16a0e302882b9ec.png


Build System 选择 Maven 后,新创建的项目会多出一个 porm.xml 文件:

https://i-blog.csdnimg.cn/direct/0033b897acbe41179b5a484b044ebf66.png


3. Maven 项目构建


点击红色框中的 Maven

https://i-blog.csdnimg.cn/direct/e25bb370ce414552bbc6dcf651a3a5a3.png


我们可以对创建的 Maven 进行一些操作

https://i-blog.csdnimg.cn/direct/011f525ad5d54e5891071bbc31c996c2.png


编译代码自动生成 target 包

我们在运行代码时,会自动添加一个 target 包,这个包存放的是我们编译生成的代码:

https://i-blog.csdnimg.cn/direct/3fe5cba8cde44ae28aa17fe814ac0be1.png


clean

clean 操作,就是把刚刚生成的 target 包清除:

https://i-blog.csdnimg.cn/direct/765bc8e76b4a4e518a52d1671f606509.png


package

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

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

在执行 package 命令时,会把上面的所有命令都执行完:

https://i-blog.csdnimg.cn/direct/f562afce6a714437b4763af8d8401b2d.png


双击 package:

https://i-blog.csdnimg.cn/direct/2cb8e9ea57124217899997230fc188de.png


我们复制上面的路径,来查看打好的 jar 包

https://i-blog.csdnimg.cn/direct/2ecebf73f2374ec98fc28c79982bfe2f.png


4. 配置镜像节点并修改porn 文件


4.1 配置内部镜像节点


根据 idea 所在文件,找到插件文件下的 maven 插件:

https://i-blog.csdnimg.cn/direct/77d1c78acbe04eca89ce7c6970a0ab77.png


https://i-blog.csdnimg.cn/direct/8a0cee4f53a34df5a64a2eaf9ddf86ec.png


我们使用 vscode 打开这个文件,并下划找到 <mirror> 这个镜像节点:

https://i-blog.csdnimg.cn/direct/5e6a5a67ac5a4ca69d5a20c5ef4757d8.png

上面默认是国外的镜像,我们需要配置国内镜像,把 <mirror> 标签中的内容替换成下列部分,并且保存:

https://i-blog.csdnimg.cn/direct/0c7c4afea75043de86fa3dd9a2a800b6.png

遇到上述情况,对于 windows 系统,只需要 以管理员方式运行 vscode ,即可保存修改后的 setting.xml 文件;

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    -->
    <!-- 加入如下mirror节点 使用国内阿里云仓库镜像  开始 -->
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
        <id>central</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun central</name>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>
        <id>spring</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun spring</name>
        <url>https://maven.aliyun.com/repository/spring</url>
    </mirror>
    <!-- 加入如下mirror节点 使用国内阿里云仓库镜像  结束-->
</mirrors>

4.2 创建 Maven 项目


https://i-blog.csdnimg.cn/direct/b85d9481795d4c26a36096686bdac57e.png


创建好后,我们打开 porm.xml 文件,在这个文件中写入数据库厂商提供的驱动包

https://i-blog.csdnimg.cn/direct/eb90e2b41b8e49798a4a6484dd92fef3.png


4.3 去 maven 商店下载对应的驱动包


打开 maven 商店:


https://i-blog.csdnimg.cn/direct/846f0449e0c542bba33d89ce023eb479.png


找到要下载的 maven 选项卡:

https://i-blog.csdnimg.cn/direct/20523bf74bcd47b5bdbe45cd371b49db.png


4.4 修改 porm.xml 文件并加载


在 porm.xml 文件中添加依赖坐标:

https://i-blog.csdnimg.cn/direct/f94c984abb834f60bfaa23ca9a6b89a6.png


点击刷新按钮,出现下列提示,表示成功添加依赖:

https://i-blog.csdnimg.cn/direct/10f11e710a6242199733fe38c7aaf364.png


https://i-blog.csdnimg.cn/direct/3007ef81bafa43ffa1c8e214576368bf.png


4.5 在依赖中引入本地下载的 jar 包方法


https://i-blog.csdnimg.cn/direct/1298aca5407f4f0e945846e361da85eb.png


https://i-blog.csdnimg.cn/direct/178902321bcf456187a1f39be5569770.png


https://i-blog.csdnimg.cn/direct/99a2ce5643b24c7dad6e693774a0538e.png


https://i-blog.csdnimg.cn/direct/7a396872224c496998ea4c77305aa4f0.png


5. Maven Help 插件


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


安装插件

https://i-blog.csdnimg.cn/direct/0fc830eeef4d40ee90b71848b76a680c.png


https://i-blog.csdnimg.cn/direct/29756a67ab32423a836c4c69c64da93e.png


https://i-blog.csdnimg.cn/direct/532b6db630ca44cc86cacf1f29835f62.png


在我们安装好 Maven helper 后,启用并重启 idea ,点开 porm.xml 文件,在下端显示分析器 Dependency Analyzer ,则说明插件启用成功;

https://i-blog.csdnimg.cn/direct/22578fa083c244538556f52ce357ca84.png


打开依赖分析器:

https://i-blog.csdnimg.cn/direct/f82725df57154baf8f870970fefe7e1d.png


列表/树形式展示的视图效果:

https://i-blog.csdnimg.cn/direct/7faebb5c3a8446aba4231d9c54c1cc64.png


6. Maven 依赖管理


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

获取的jar包,其实就是依赖.

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


6.1 依赖配置


依赖:指当前项目运行所需要的jar包;

比如前面学习 JDBC 时,我们需要手动下载 mysql-connector-java 的包,并且添加到项目中;如果使用Maven,我们只需要在 pom.xml 中引入 mysql-connector-java 的依赖即可:


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

https://i-blog.csdnimg.cn/direct/2e92f006d79946a08e9040e5bd8f7c1a.png


依赖坐标 结构如下:

https://i-blog.csdnimg.cn/direct/7a00bfec1a524334b494f8933851eac8.png

依赖都是由上面这三部分组成的,缺一不可;


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

https://i-blog.csdnimg.cn/direct/01fbd51ad61045dd82f0fc54faef95e7.png

下列的刷新键,和上面的刷新等效:

https://i-blog.csdnimg.cn/direct/c9ca180eda4a46d0b470cacbb1cb3e28.png

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


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

https://i-blog.csdnimg.cn/direct/f1bd121c3ab74f9bb2ded847226c6a6a.png


6.2 依赖传递


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

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

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

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


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

比如吃火锅,现在我们可以点一个海底捞外卖,直接就把所有食材都送过来了,包括什么锅,配什么菜

比如去医院看病,借助"互联网",实现了信息共享,只需要带上身份证,以往的病历和检查结果就都可以看到了.

https://i-blog.csdnimg.cn/direct/e354e671f383426ab63e4bcf2be8ffc3.png

如上图,对于不同版本的 jar 包,默认生效最近距离的版本,如左右分支都有 jar C,默认先生效右分支的;

项目A 通过 Maven 引入 JarA 时,会自动引入 JarBJar C

JarA项目B 就是 项目A 的直接依赖; JarBJar C 是间接依赖;

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

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


我们打开依赖分析器,查看依赖之间的树状视图,我们可以发现,在导入 connector-j 包时,也会自动导入 protobuf 这个包, protobufconnector-j 的直接依赖:

https://i-blog.csdnimg.cn/direct/71f83c87c84b447ba5b8fdaf9cf0008c.png


6.3 依赖排除


如果我们在 MavenDemo 项目中,不再需要 protobuf 这个 jar 包,就可以进行排除;

进行依赖排除之前,可能需要先配置好对应的 setting 中的镜像节点;


自动排除依赖

https://i-blog.csdnimg.cn/direct/32f1c4da2cdb4335a65ed874c00d1dee.png


https://i-blog.csdnimg.cn/direct/1337839a6163458cb763908332026f63.png


手动排除依赖

自动排除依赖操作用的比较少,也不好用,我们可以手动添加 <exclusions> 标签,对不需要的依赖进行排除:

https://i-blog.csdnimg.cn/direct/2366010c1c4c43dc8653167e83a2864b.png


此时,要排除的依赖中 不需要写版本号 ,只需要写 groupIdartifactId

可以先写 artifactId ,idea 会自动生成 groupId

https://i-blog.csdnimg.cn/direct/2c73d14002d340adb1d286a208e84d2a.png


https://i-blog.csdnimg.cn/direct/b391b90a7a394226bbefeec6b8012a06.png


如果后续还需要添加依赖,则重新在 <dependencies> 标签中再加一个 <dependency> 即可:

https://i-blog.csdnimg.cn/direct/40c0148506f947fe8251d61fa7965697.png


再次刷新,发现不再是引入mysql 的 jar 包后自动引入的 protobuf 了,树状显示没有从属关系:

https://i-blog.csdnimg.cn/direct/2fabdfd8252e4f4ea86496135d8bf5b3.png


7. Maven 仓库


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

https://i-blog.csdnimg.cn/direct/0e8869e6e14547f98bc40be6a90d7962.png

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

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

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


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

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

https://i-blog.csdnimg.cn/direct/154e6b380a0748dc9a311632846142ad.png


7.1 本地仓库


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

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

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

https://i-blog.csdnimg.cn/direct/0ea5837afe934b0c92cb6f2331202db9.png


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

https://i-blog.csdnimg.cn/direct/79d3dc63dda847778714701b518fdad2.png


如果我们的 maven 仓库路径中出现中文,就要对这个路径进行修改,避免出现不必要的麻烦:

https://i-blog.csdnimg.cn/direct/03d579beaf664e88aae0879aeee7067e.png


找到对应的目录:

https://i-blog.csdnimg.cn/direct/86437fae1c64425cbb7df6c928bcc3c3.png


https://i-blog.csdnimg.cn/direct/94abb2f8a08e449689d53d8b9c5582c0.png


把 m2 粘贴到自定义的目录

https://i-blog.csdnimg.cn/direct/9a365d288f74456ea8ec5f98f1c1618f.png


修改路径即可:

https://i-blog.csdnimg.cn/direct/bfc7383beb20477dbfb6e935348a20e0.png


7.2 中央仓库


中央仓库: maven软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网;

由Maven 团队维护,全球唯一.

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

可以通过https://mvnrepository.com 这个网站来查询并下载;


我们可以把自己写好的 Jar 包上传到中央仓库(具备一定的要求),也可以从中央仓库下载Jar包;

https://i-blog.csdnimg.cn/direct/6a296992d5f14278b76c9b7986ff6948.png

查找Jar的坐标

1.访问

2.进行查找,比如mysql


https://i-blog.csdnimg.cn/direct/0b416714709245b79c4912e24a9d383a.png


只要已发布 jar 包,漏洞就无法修改,只能在更新新的修复 jar 包的漏洞:

https://i-blog.csdnimg.cn/direct/036535ade7174e909e1b1a55dac1ebd1.png


https://i-blog.csdnimg.cn/direct/2aac2041f878402f84fb9987bbf7d722.png


https://i-blog.csdnimg.cn/direct/244a8dbab74040dda03fb998dedb6a37.png


粘贴到依赖中,如果代码显示红色,则只需要点击刷新,会自动下载好 jar 包,并且会在本地仓库的,目录中查找到下载好的 jar 包:

https://i-blog.csdnimg.cn/direct/80c20c842fb74f73af31a66cdf8a7e0e.png


7.3 私有服务器


当Maven需要下载资源的时候

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

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

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

  4. 如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库里,再为Maven的下载请求,提供服

    务;

  5. 私服是很多人在使用的,所以只需要第一个使用者下载一次就可以了

https://i-blog.csdnimg.cn/direct/161381cea6284294b3c5c3e2a16fce47.png


8. 配置国内源


8.1 配置当前项目 setting


https://i-blog.csdnimg.cn/direct/4dd08157a752499d89b5907350ab5c7a.png


把上面的 setting 文件复制到仓库路径:

https://i-blog.csdnimg.cn/direct/1d736cff9f6342f7b5844d07f2f7a2ac.png


或者把原来的 setting 文件镜像节点修改为:

		<mirror>
          <id>aliyunmaven</id>
          <mirrorOf>*</mirrorOf>
          <name>阿里云公共仓库</name>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>

https://i-blog.csdnimg.cn/direct/2b954f5fd40f4431a45569c37327c548.png


https://i-blog.csdnimg.cn/direct/6cef75660b40474caf0d4f4e7b32cdf2.png


8.2 设置新项目的 setting


上面的设置只对当前这个项目生效,我们还需要进一步设置

https://i-blog.csdnimg.cn/direct/4f83f40aba824f81ad507b71ac3cdfba.png


找到 maven ,修改里面的路径,刚刚设置好的路径都会对以后创建 maven 项目生效:

https://i-blog.csdnimg.cn/direct/1056169385b940e9b7b3fa2a0cde6e76.png


https://i-blog.csdnimg.cn/direct/0c27bc4738cb40dc953c557a049dfd10.png


https://i-blog.csdnimg.cn/direct/a9d3553301c848ff9cad6aa4116248ea.gif#pic_center

https://i-blog.csdnimg.cn/direct/cd5abfb0ba1c49128b69f4ebb5922bac.gif#pic_center