版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/104119295
文章目录
Maven 解析依赖信息时会先到本地仓库中查找被依赖的 jar 包。对于我们自己开发的 Maven 工程,要使用
mvn install
命令安装到仓库后才能使用。
一、依赖的范围
1、compile 范围依赖
- 对主程序是否有效: 有效
- 对测试程序是否有效: 有效
- 是否参与打包: 参与
- 是否参与部署: 参与
- 典型例子:
spring-core
2、test 范围依赖
- 对主程序是否有效: 无效
- 对测试程序是否有效: 有效
- 是否参与打包: 不参与
- 是否参与部署: 参与
- 典型例子:
junit
3、provided 范围依赖
使用该依赖范围的 Maven 依赖,只对编译和测试的 classpath 有效,对运行的 classpath 无效,典型的例子就是
servlet-api
, 编译和测试该项目的时候需要该依赖,但是在运行时,web 容器已经提供了该依赖,所以运行时就不再需要此依赖了,如果不显示指定该依赖范围,并且容器依赖的版本和 Maven 依赖的版本不一致的话,可能会引起版本冲突,造成不良影响。
- 对主程序是否有效: 有效
- 对测试程序是否有效: 有效
- 是否参与打包: 不参与
- 是否参与部署: 不参与
- 典型例子:
servlet-api.jar
二、依赖的传递性
1、好处
可以传递的依赖不必在每个模块工程中都重复声明,在 “最下面” 的工程中依赖一次即可。
2、注意事项
非 compile 范围的依赖不能传递。所以在各个工程模块中,如果有需要就得重复声明此依赖。
三、依赖的排除
1、需要设置依赖排除的场合
2、依赖排除的设置方式
<dependency>
<groupId>com.sun.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<!-- 依赖范围 -->
<scope>compile</scope>
<!-- 依赖的排除 -->
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
四、依赖的原则
1、作用
主要是为了解决模块工程之间的 jar 包冲突问题。
2、原则一:路径最短者优先
如下图,MakeFriends 依赖于 HelloFriend,HelloFriend 依赖于 log4j.1.2.14 和 Hello,Hello 依赖于 log4j.1.2.17,由于 log4j.1.2.14 离 MakeFriends 近,所以 MakeFriends 最终会依赖于 log4j.1.2.14。
3、原则二:路径相同先声明者优先
先声明指的是
<dependency>
标签的声明顺序,靠前的优先高。
五、统一管理依赖的版本
1、情景举例
这里对 Spring 各个 jar 包的依赖版本都是
4.0.0
,如果需要统一升级为4.1.1
,怎么办?手动逐一修改不可靠。
2、配置方式
这里以 版本号 为例,其他配置均可参考此例。
-
在当前 pom.xml 文件中使用
<properties>
标签,标签内容使用自定义标签统一声明版本号即可,如下配置:<properties> <sun.v>4.1.1.RELEASE</sun.v> </properties>
-
在需要统一版本的位置,使用
${自定义标签名}
引用声明的版本号,如下配置:<version>${sun.v}</version>