写点什么

活久见!22 张图带你 maven 实战通关,GitHub 上线 1 小时浏览量破万

发布于: 2021 年 05 月 24 日
活久见!22张图带你maven实战通关,GitHub上线1小时浏览量破万

今日分享开始啦,请大家多多指教~

Maven 依赖管理

Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。

可传递性依赖发现

  • 一种相当常见的情况,比如说 A 依赖于其他库 B。如果,另外一个项目 C 想要使用 A ,那么 C 项目也需要使用库 B。

  • Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。

  • 我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。其他的事情 Maven 会帮我们搞定。

1、首先在 idea 中创建一个空项目


2、ideaworkspace 空项目建好后,在这个空项目空间中,点击新建模块





同上述步骤,再次创建模块 ebuy-2:


3、maven 项目依赖关系

3.1、简单来说就是连个项目之间可以相互依赖,并且使用彼此的 jar 包依赖文件。

我们简单举个例子,就是在项目 ebuy-1 中引入依赖文件,在项目 ebuy-2 中引用项目 ebuy-1。


3.2、简单测试一下 mysql 驱动依赖在 ebuy-2 中是否可以用


上述情况时,ebuy-2 项目中引用了 ebuy-1 项目,而 ebuy-1 项目又依赖了 mysql 驱动包,所以就都在 ebuy-2 项目中显示出来了,并且经过测试 cbuy-2 可以使用引用的 mysql 驱动。

3.3、跨项目工具类引用


3.4、maven 依赖控制范围

scope 标签参数如下:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种 classpath 都有效,即在编译、测试和运行的时候都要使用该依赖 jar 包;

  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试 classpath,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要;

  • provided:此依赖范围,对于编译和测试 classpath 有效,而对运行时无效;

  • runtime:运行时依赖范围,对于测试和运行 classpath 有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现(这个一般很少用到);

optional 标签参数如下:

  • 如果是 true,则表示该项目下的 jar 包不能被引用,但是该项目还是可以被引用的,其工具类也不受限制。

  • 如果是 false,则表示该项目下的 jar 包可以被引用,但是该项目还是可以被引用的,其工具类也不受限制。

scope 默认是 compile

optional 默认是 false

3.5、maven 依赖排除

在项目引用中,我们一般会将所有 jar 包和工具类创建在一个项目中,然后这个项目供其他项目引用,也就行相当于调用。但是有时候我们在其他项目中需要使用某个 jar 包的更高版本,这个时候从引用项目中所得到的 jar 包就不适用了,还需要我们自己再导入更高版本的依赖文件,然后再把原来的引用项目所得到的 jar 包给排除掉。

演示如下:


4、maven 项目继承关系(推荐)

4.1、parent 继承方式


注意:

此处的继承在以后的实际开发项目中,聚合工程会用到的很多(很重要)。

4.2、dependencyManagement 使用简介

Maven 中的 dependencyManagement 元素提供了一种管理依赖版本号的方式。在 dependencyManagement 元素中声明所依赖的 jar 包的版本号等信息(也即是在父项目中声明),那么所有子项目再次引入此依赖 jar 包时则无需显式的列出版本号,只需列出所需要用的依赖。Maven 会沿着父子层级向上寻找拥有 dependencyManagement

元素的项目,然后使用它指定的版本号。

4.3、实例演示:

在父项目 ebuy-1 中:

在子项目 ebuy-2 中:

如果我们在子项目中输入相关依赖的版本号:

4.4、使用优点

如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号。当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要逐个修改子项目;另外如果某个子项目需要另外的一个版本,只需要声明 version 即可,会自动覆盖掉父项目中的 version。

4.5、注意事项

dependencyManagement 中定义的只是依赖的声明,并不实现引入,因此子项目需要显式的声明需要用的依赖。


今日份分享已结束,请大家多多包涵和指点!

用户头像

还未添加个人签名 2021.04.20 加入

Java工具与相关资料获取等WX: pfx950924(备注来源)

评论

发布
暂无评论
活久见!22张图带你maven实战通关,GitHub上线1小时浏览量破万