【Maven学习笔记八】依赖

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/104119295







Maven 解析依赖信息时会先到本地仓库中查找被依赖的 jar 包。对于我们自己开发的 Maven 工程,要使用 mvn install 命令安装到仓库后才能使用。


一、依赖的范围

1、compile 范围依赖

  • 对主程序是否有效: 有效
  • 对测试程序是否有效: 有效
  • 是否参与打包: 参与
  • 是否参与部署: 参与
  • 典型例子: spring-core

2、test 范围依赖

  • 对主程序是否有效: 无效
  • 对测试程序是否有效: 有效
  • 是否参与打包: 不参与
  • 是否参与部署: 参与
  • 典型例子: junit

8依赖的范围


3、provided 范围依赖

使用该依赖范围的 Maven 依赖,只对编译和测试的 classpath 有效,对运行的 classpath 无效,典型的例子就是 servlet-api, 编译和测试该项目的时候需要该依赖,但是在运行时,web 容器已经提供了该依赖,所以运行时就不再需要此依赖了,如果不显示指定该依赖范围,并且容器依赖的版本和 Maven 依赖的版本不一致的话,可能会引起版本冲突,造成不良影响。

  • 对主程序是否有效: 有效
  • 对测试程序是否有效: 有效
  • 是否参与打包: 不参与
  • 是否参与部署: 不参与
  • 典型例子: servlet-api.jar


二、依赖的传递性

8依赖的传递性

1、好处

可以传递的依赖不必在每个模块工程中都重复声明,在 “最下面” 的工程中依赖一次即可。


2、注意事项

compile 范围的依赖不能传递。所以在各个工程模块中,如果有需要就得重复声明此依赖。



三、依赖的排除

1、需要设置依赖排除的场合

8依赖的排除


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。

8依赖原则一


3、原则二:路径相同先声明者优先

先声明指的是 <dependency> 标签的声明顺序,靠前的优先高。

8依赖原则二



五、统一管理依赖的版本

1、情景举例

8spring的jar包

这里对 Spring 各个 jar 包的依赖版本都是 4.0.0,如果需要统一升级为 4.1.1,怎么办?手动逐一修改不可靠。


2、配置方式

这里以 版本号 为例,其他配置均可参考此例。

  1. 在当前 pom.xml 文件中使用 <properties> 标签,标签内容使用自定义标签统一声明版本号即可,如下配置:

    <properties>
    	<sun.v>4.1.1.RELEASE</sun.v>
    </properties>
    
  2. 在需要统一版本的位置,使用 ${自定义标签名} 引用声明的版本号,如下配置:

    <version>${sun.v}</version>
    


博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



发布了166 篇原创文章 · 获赞 169 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/104119295