Maven依赖的可传递性
来源:互联网 发布:企业注册域名 编辑:程序博客网 时间:2024/05/21 21:02
今天我们来讲一讲Maven工程在引用jar包上的传递性。
1.情景分析
假设有两个Maven工程,A和B,其中A引用了已经安装在仓库中的B工程install成的jar包,而B工程本身有对spring-core.jar的引用。我们可以看到在A工程的Maven Dependencise中,也会有对spring-core.jar的引用。这就是引用依赖的传递性。
2.依赖传递的好处
依赖的好处是可传递的依赖不必在每一个模块中都加以引用,最底层引用一次就可以,实际项目工程中,会有一个专门的过程来负责对项目中大多数工程都用到的jar包的管理。
3.依赖传递的范围
还有一点需要注意的是,我们讲的依赖的可传递性,仅仅针对compile范围的jar包的引用,是可以在Maven Project之间传递的,而对test、provided范围的依赖是不可以在Maven Project之间传递的。所以,test/provided范围的依赖就需要单独的在每一个需要用到的Maven Project中单独添加,如junit.jar和servlet-api.jar。
4.依赖传递的排除
① 情景分析
有时我们对某个jar包进行依赖时,会将被依赖jar包的依赖也间接的依赖了,如依赖spring-core.jar,会将commons-loging.jar也给依赖进来,处于某种安全性和稳定性的考虑,我们不希望将这个附带的commons-logging.jar也给引用到当前的Maven Project中,那么我们就需要在pom.xml中间接引入这个commons-logging.jar的地方使用<exclusions><exclusion><groupId><artifactId></artifactId></groupId></exclusion></exclusions>将其剔除。需要注意的是,若是在下层剔除,则上层自动的也不会对下层剔除的内容进行引用,若是在上层剔除,下层依然会引用。
5.依赖传递的原则
这个原则的作用是解决多个Maven Project之间的jar包冲突的问题。
当一个上层的Maven Project有多个下层的Maven Project时,若下层的Maven Project有对一个相同的jar包引用只是版本不同,那么这个上层的Maven Project间接引用哪一个版本的jar包呢?Maven内置采用就近原则,就近的意思是,当前这个Maven Project到需要被引用的jar包之间经历了几层的引用关系,层数越少说明离得越近,则采用层数少的jar进行引用;当相同层数时,那么Maven采用在当前Maven Project当中配置的dependency的顺序进行引用。但是需要注意的是,如果当前Maven对这个相同的jar进行了直接的引用,那么就不会去寻找间接的引用的jar了。
6.统一管理jar的版本号
当一个Maven Project有对一个技术的一系列jar包有引用时,如对spring-*.jar的引用,为了开发中尽量不出问题,我们需要采用jar包相同的版本号。
我们只需要在pom.xml文件中配置一个properties标签结合我们自定义的标签,然后在dependency标签下的version标签中使用${}对上面的自定义标签进行应用就可以了。
- Maven依赖的可传递性
- maven 依赖的传递性
- Maven的传递性依赖
- Maven(二)Maven的依赖范围和传递性依赖
- maven传递性依赖
- 【Maven】传递性依赖
- Maven中包的依赖传递性
- maven的依赖传递性讲解
- 关于Maven的依赖传递
- maven的依赖传递与排除依赖
- 3.2.maven传递性依赖
- Maven传递性依赖原则
- maven 传递性依赖和依赖范围
- Maven依赖排除 禁止依赖传递 取消依赖的方法
- Maven依赖排除 禁止依赖传递 取消依赖的方法
- Maven依赖排除 禁止依赖传递 取消依赖的方法
- Maven依赖排除 禁止依赖传递 取消依赖的方法
- Maven依赖排除 禁止依赖传递 取消依赖的方法
- 深入分析ConcurrentHashMap1.8的扩容实现
- Tomcat下的work文件夹
- 麻将游戏开发,服务端调试
- linux入门教程 第3章 redhat使用指南
- 动态代理
- Maven依赖的可传递性
- Apache AB性能测试工具使用教程
- Android WebView与 JS 交互方式
- zookeeper集群部署问题
- virtualbox虚拟机里面最顶部没有控制、设置和帮助等选项
- 在Windows系统下搭建ELK日志分析平台(ElasticSearch、Logstash和Kiabana)
- 从MOSSE到KCF,核化相关滤波器的历程
- opencv 轮廓提取
- 存储过程语法及实例