一.依赖配置:

注:配置依赖后要刷新才生效
二.依赖配置代码演示:

以上述图片中maven-project01项目为例,现在要引入第三方资源来记录日志,首先打开pom.xml配置文件,如下图:

如上图,蓝色标记的内容是用来描述当前Maven项目的,
如果需要添加当前项目运行时所需要依赖的资源,就需要申明一个标签dependencies(译为依赖),此时就可以配置当前项目所需要的多个依赖,每一个依赖需要在标签dependency中定义,如下图:

如上图,groupId为组织名,artifactId为模块名,
首先添加artifactId中的内容logback-classic,
之后系统会自动提示添加groupId的内容,用ch.qos.logback,
最后会自动出现version标签,选1.2.3即可,如下图:


如上图,
此时需要判断依赖是否真正添加成功,就需要点击边缘上的"Maven"面板,如下图:

如上图,展开maven-project01,找是否有一栏叫dependencies(或者依赖项),以及dependencies下是否有1.2.3这个logback的版本,如果有就代表依赖生效,反之未生效,如下图:

如上图,发现并没有dependencies,这就说明该依赖未生效,因为在pom.xml中所配置的依赖要想生效,需要点击下图中左上角的"重新加载所有Maven项目"即可,如下图:


如上图,此时依赖生效。
注:在添加依赖时可能有的提示信息并没有,这是因为该Maven仓库中并没有该依赖,当使用过一次后就会有对应的提示了。
如果是第一次使用,在编写这些坐标信息时没有坐标提示该怎么办呢?
可以打开浏览器进行查找,访问一个Maven仓库的网站mvnrepository.com,该网站可以找到所需要的依赖,如下图:

如上图,比如现在要查找依赖logback,如下图:

如上图,本例以logback-classic为例,如下图:

如上图,Vresions中显示的是各个版本,具体用哪个版本,往往参考一个指标,即使用频次(USAGES),频次越高代表使用的越多,现在1.2.3版本用的最多,如下图:

如上图,如果想要切换为1.2.10版本等其他版本,只需要点击该版本所在位置,如下图:

如上图,往下找到Maven,就可以直接找到该依赖的坐标信息,如下图:

如上图,复制该坐标信息后粘贴到pom.xml文件中并刷新即可,其中属性scope不需要,刷新后如果是新的依赖版本就会联网下载该新的依赖版本(新的依赖版本刚复制进去会报错)。
三.依赖传递:
1.引例:
之前使用logback记录日志时在Java工程中引入了3个jar包,但刚才的例子为什么只引入了logback-classic这一个坐标?
其实在Maven项目中引入这一个坐标后,另外两个jar包也会自动引入,以刚才的例子为例,打开Maven面板,如下图:

如上图,点开maven-project01,再点开"依赖项",发现除了"logback-classic"外还有logback-core和slf4j-api这两个依赖,这两个依赖是自动引入的,这就特性就是Maven中的依赖传递,如下图:

2.性质a:传递性

以上述图片为例,projectA依赖于projectB和JAR包,projectB依赖于projectC和JAR包,由于依赖具有传递性,即使projectA中没有添加C项目的依赖,projectA项目也会依赖projectC,projectC和projectB又分别依赖于一个JAR包,即使projectA中没有添加projectC和projectB这两个JAR包的依赖,projectC和projectB这两个JAR包也会传递给projectA。
- 直接依赖:上图中projectA的直接依赖是projectA直接关联的JAR包和projectB
- 间接依赖:上图中除了projectA直接关联的JAR包和projectB,其他均为projectA的间接依赖
- projectA依赖于projectB,projectB又依赖于另外一个资源,那么默认projectA也依赖该资源,但如果只想让projectA依赖projectB,不想依赖这个另外的资源,那么这个就可以使用Maven项目中的排除依赖来实现
3.性质b:排除依赖

四.传递依赖代码实现:

以上述图片为例,首先打开maven-projectA项目的pom.xml文件,如下图:

如上图,可知maven-projectA依赖于logback-classic和maven-projectB,也就是说maven-projectA依赖maven-projectB只需要通过依赖配置的形式来指定maven-projectB的坐标即可,maven-projectB就是com.itheima下的maven-projectB,按住ctrl再点击maven-projectB,此时就会打开maven-projectB下的pom.xml文件,如下图:

如上图,可知maven-projectB依赖于maven-projectC和一个依赖junit,继续按住ctrl再点击maven-projectC,此时就会打开maven-projectC下的pom.xml文件,如下图:

如上图,maven-projectC依赖于工具包commons-io。
上述的例子中在maven-projectA的pom.xml文件中虽然没有直接依赖maven-projectC,那maven-projectA是否有maven-projectA的依赖呢?
打开Maven面板,找到maven-projectA,如下图:

如上图,maven-projectA直接的依赖是logback-classic和maven-projectB,现在展开maven-projectB,如下图:

如上图,maven-projectB下包含了maven-projectC和junit,意味着maven-projectB依赖的maven-projectC传递到maven-projectA,maven-projectB中依赖的junit也传递给maven-projectA,同理maven-projectC下的工具包commons-io也会传递给maven-projectA,如下图:

如上图,这就是Maven的依赖传递。
在idea中还提供了一种可视化的查看方式,要想查看某个Maven项目的依赖情况,只需要打开pom.xml文件,右击->图表(英译为Diagrams)->显示图...(英译为Show Dependencies...),如下图:

如上图,这样就会以图表的形式展示出依赖之间的关系,如下图:

五.排除依赖代码实现:

以上图的maven-projectA为例,可知maven-projectA依赖于maven-projectB,maven-projectB项目下还传递了maven-projectC和junit,假设现在maven-projectA中不需要junit依赖,就可以将junit排除掉。junit是maven-projectB传递下来的,所以就需要在maven-projectA项目中引入maven-projectB依赖的时候在maven-projectB下排除依赖junit,如下图:

如上图,
排除依赖可以使用exclusions标签,在exclusions标签中可以排除多个依赖,此时只需要排除junit,如下图:

如上图,排除依赖时不需要指定版本,之后刷新maven-projectA项目即可,结果如下图:

如上图,此时junit依赖就没有了。
六.补充:

右击pom.xml->点击"添加为Maven项目"后等待,也可以实现依赖配置。