:::info
①为了帮助我们管理 项目中的Jar包,如果要在项目中使用第三方包,那么就需要去下载jar包,再将jar包添加到当前项目的目录中,再去将jar包选择添加为当前项目的依赖
:::
:::danger
该方式的弊端:
1.寻找jar包: 官网网站提供的地址进行下载 -> 相对比较麻烦
解决: -> 提供一个中央的下载方式,所有第三方的jar都可以在该路径中下载
2.下载完成后需要在当前项目路径中创建目录,再添加到项目依赖中
-> 1.当创建的项目较多时,每个项目中都有存放依赖的目录 会导致项目的文件过大,依赖会重复保存
-> 2.当项目发送给其他开发者使用时,需要手动添加 jar 包到项目路径中 比较麻烦
解决方式: -> 提供一个本地当前开发环境(WIN)的仓库,所有的项目jar包,都可以通过某种方式直接使用该仓库中所有jar包
可以达到多个项目共享同一个 jar包
-> 可以提供一个 jar包 的识别路径,包括jar包的名称 版本 等信息 可以自动去外部的中央仓库进行下载
下载到本地当前开发环境(WIN)的仓库中 实现自动下载
-> 该方式可以和IDEA进行互通,作为IDEA中的一个插件,当项目打开后,该插件根据给定的jar包信息,自动进行识别
从本地开发环境中进行寻找(WIN),如果寻找不到,那么自动下载,寻找到,那么添加到当前IDEA中
:::
:::info
② 当一个大项目中包含有多个小项目,那么每个项目之间的Jar包管理,可能会存在有冲突问题
冲突问题:
当A子项目使用的Mysql版本是 5.1.49版本,但是在B子项目中使用的Mysql版本 8.1.12版本
可能两个版本的Jar包中对于Driver类路径不一样,那么后续代码运行过程中,对于的类加载不到
需要将多个版本进行统一
:::
上述问题: MAVEN都可以解决
jar之间的依赖关系,jar包管理问题统称为依赖管理
比如:对于Mysql来说,其内部也使用了其他的第三方Jar包 根据当前import关键字从其他jar包中获取所需要的类
Maven – Download Apache Maven
下载时避免选择最新版本,Maven版本已提供教学安装包 apache-maven-3.5.2.zip

配置远程仓库镜像
在conf/settings目录中的mirrors标签中配置阿里云镜像仓库:
<mirror>
<id>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
本地仓库路径根据自己当前路径配置
<localRepository>D:\software\apache-maven-3.5.2\repolocalRepository>
在当前系统环境变量中新建系统变量


:::info
1.项目配置: 只在当前项目中有效 file -> settings
2.默认配置: 在所有当前idea创建的项目中,都使用该配置作为其默认配置
:::






在本地仓库中,jar包按照一定的规则进行保存,规则如下:

项目创建好后,会自动生成一些目录层级,每个目录层级中保存的文件类型不一致,所以需要按规范使用目录

:::warning
注意:其中External Libraries 中保存了当前项目所添加的第三方依赖
:::
注意:添加外部依赖需要在当前Pom文件中添加如下内容:
其中标签只能出现一次,在该标签中,每添加一个第三方依赖就编写一个的标签内容,标签内容由依赖的坐标(GAV)组成
坐标由g-a-v组成
[1]groupId:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本
当依赖添加完成后,需要重载当前项目
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.48version>
dependency>
dependencies>

重载项目的时机:
1.当Pom文件中内容被修改需要生效时
2.当前项目第一次打开时,如果没有自动加载依赖,那么需要重载项目,可以通过 External Libraries 查看依赖是否被加载成功

<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
junit依赖的作用:
可以在给定的类中 某个方法上添加一些测试的注释 可以直接运行代码


对于当前类中如果添加了Test注释标记,那么整个类都可以直接运行,运行时所有的Test标记的方法都会被执行


注意:
①子项目可以继承父项目中的依赖,但是子项目中也可以添加对相同名称版本不同的依赖,根据就近原则,选择当前依赖最近的jar包版本
② 子项目之间默认是没有相互的依赖关系的,获取不到内部定义的类信息
③ 如果子项目之间存在由需求关系,那么可以在pom中添加其他子项目相关的依赖信息(GAV)并且添加后,需要再重载当前项目
④ 当前项目需要获取其他非公共项目时,需要将项目通过install安装到本地仓库中,再对当前项目添加依赖信息,再重载项目,当要添加的项目是同属一个大项目中的子项目时,此时不需要再通过install进行安装
<parent>
<groupId>com.shujiagroupId>
<artifactId>MvnProartifactId>
<version>1.0-SNAPSHOTversion>
parent>
<artifactId>nextSonMvnPro2artifactId>
在子项目中通过parent标签可以其父项目 父项目中的 groupId和version会被当前子项目所使用所以对于当前子项目的描述 只有 artifactId
<groupId>com.shujiagroupId>
<artifactId>MvnProartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
<modules>
<module>NextSonMvnPro1module>
<module>nextSonMvnPro2module>
modules>
父项目中包含由 GAV 和 packaging 一般情况下选择使用pom作为管理
modules 中表示了当前父项目存在有那些子项目 其项目名称为什么
配置参数信息
<properties>
<junit.version>4.13junit.version>
<mysql.version.pre>5.mysql.version.pre>
<mysql.version.next>1.49mysql.version.next>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>${junit.version}version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>${mysql.version.pre}${mysql.version.next}version>
dependency>
dependencies>
properties中可以添加自定义的变量信息,其格式为<变量名>变量值变量名>
对于添加的配置信息 可以在当前Pom中的任意位置进行调用其调用格式为${变量名}
应用场景:
当pom文件中所添加的依赖非常多时,那么对于其版本可能经常会更改,那么查找依赖会非常麻烦,于是可以在properties中定义版本,直接进行查看properties修改即可