大数据开发-Maven依赖管理

Maven作为当下最流行的项目管理工具,其中核心的特性就是依赖管理。当我们在处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就会变得很复杂,管理也会变得很难。因此为了解决这种问题,Maven 提供了一种高度控制的方法。所以本期带来的是大数据开发-依赖管理。

大数据开发-Maven依赖管理

一、可传递性依赖发现

依赖是Maven项目引用的资源架包,依赖范围就是这些资源架包在maven项目中的作用范围,反过来说,maven项目通过依赖范围来控制何时引用资源架包。以一种相当常见的情况来说,比如 A 依赖于其他库 B。但此时另外一个项目 C 想要使用 A ,那么 C 项目也需要使用到库 B。而Maven 可以避免去搜索所有所需库的需求。

大数据开发-Maven依赖管理

Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系,其他的事情 Maven 会帮我们搞定。

通过可传递性的依赖,所有被包含的库的图形会快速地增长。当有重复库时,可能出现的情形将会持续上升。Maven 提供一些功能来控制可传递的依赖的程度。

二、依赖原则

有两个原则,主要目的是为了解决jar 包冲突。

第一原则:路径最短者优先

大数据开发-Maven依赖管理

第二原则:路径相同时先声明者优先

大数据开发-Maven依赖管理

三、依赖范围

大数据开发-Maven依赖管理

依赖是Maven项目引用的资源架包,依赖范围就是这些资源架包在Maven项目中的作用范围,反过来说,Maven项目通过依赖范围来控制何时引用资源架包。之前有介绍Maven的默认生命周期,(compile,test,package,install,deploy)。Maven的依赖范围用scope关键字表示,恰好也是五种,虽然不是和生命周期完整对应的,但是基于生命周期划分的。

大数据开发-Maven依赖管理

通过下表可以知道依赖范围表示的作用域。

大数据开发-Maven依赖管理

compile

默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布。即依赖的项目会参与到当前项目的编译、运行、测试以及打包发布,是一个比较强的依赖范围。

test

表示dependency作用在测试时,不作用在运行时。 只在测试时使用,用于编译和运行测试代码。不会随项目发布。

runntime

表示dependency不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。即是跳过编译阶段, 只参与测试或运行。

provided

表示maven项目只在编译和测试时引用该依赖,如果将项目打包运行时,则不会引入该依赖,如servlet-api,这是web项目常用的架包,在项目编译和测试时都需要用到该架包,如果项目需要运行,则需要将项目部署到tomcat或其他web服务器上,但是tomcat中自带了servlet-api,如果maven项目中引入了servlet-api,那么会和tomcat中的servlet-api产生冲突,所以可以使用provided限定servlet-api,让maven项目在打包时不再引入servlet-api.

system

跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。需通过外部引入,不会在仓库中查找。例如一些特殊的jar我们或通过拷贝jar到web-info/lib下,这些jar就可以配置为system范围。

大数据开发-Maven依赖管理

以上就是本期的所有内容啦,建议联合上一期“大数据开发-Maven生命周期”一起理解,因为这两章内容联系较多,也较为容易理解。

希望大家点个关注,及时收取最新文章推送,想了解更多敬请咨询加米谷大数据。

有问题的欢迎在评论区留言,如有侵权请告知。

展开阅读全文

页面更新:2024-04-28

标签:前项   目的   数据   本期   生命周期   路径   模块   冲突   原则   作用   阶段   关系   测试   项目   资源   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top