Maven3实战笔记02坐标和依赖--2
5.? 依赖调节
假如现在有这么一个情况,项目A->(依赖)项目B->项目C->X(1.0),项目A->项目D->X(1.5)。那么项目A就不得不依赖于项目X。那我们这个项目A到底是下载X项目的哪个版本呢?Maven3对于这种情况有2个原则,第一个就是路径优先原则,第二个就是在配置文件pom.xml中谁先配置在前面谁解析使用。
项目路径就是指依赖的层级比如A->(依赖)项目B->项目C->X(1.0)就是X是A的第三层依赖,A->项目D->X(1.5)则是X是A的第二层依赖。那么根据原则1,X1.5版本会被优先选择使用。
6.? 可选依赖
当一个项目出现了依赖可选——optional为true的时候说明,只有当前这个项目依赖于此可选依赖,而别的项目需要此项目的时候,此项目的可选依赖并不会像其他依赖类型似地,可选依赖不会传递给别的项目。在别的项目需要相关的可选依赖的时候还需要在pom.xml文件中显示的进行声明。其实可选依赖并不倡导,可选依赖就意味着此模块的职能比较复杂,不单一。一般替使用者完成了不该完成的功能。有点违背了Java设计模式的职能单一原则。
7.? 依赖最佳化实现
1):归类依赖:就拿咱们这个邮件模块来说,用到了Spring2.5.6,其中用到了Spring项目的不同模块,现在开源的项目越来越讲究模块化,模块职能单一化。所以看到往往一个开源项目有很多jar,用到那个模块引入哪个jar,Spring、Hibernate都是这么做的。那么假如我们现在的项目要升级版本,Spring2.5.6已经不能满足了,要升级到3.0版本,怎么办?一个个去改以来的版本号?恩,也是个办法,不过有点笨拙。有另一个办法,不错,就跟Spring配置文件引入的那个资源文件原理一样,声明一个常量信息,所有用到的地方都用这个常量信息就够了,如下是我们修改后的配置
?
?
?2):排除依赖:假如现在有这么一个场景项目A->项目B-项目C,而A与C就形成了间接依赖,而C呢却又老是不稳定。那么构建项目A的时候如果下载了项目C的非稳定版本是很不安全的。那么不妨这么做,在项目A的依赖中肯定是要配置项目B的,在配置项目B的同时,强制让项目B排斥项目C,让A再加个依赖就是A用着较为稳定的版本C。配置如下
?使用IDE工具可以显示依赖图,当然可以通过命令?8.? 总结我们这次开发了一个模块介绍了一下Maven的构建特性和jar包依赖特性。之后结合IDE阐述了Maven的pom.xml文件的一些内容——坐标。之后介绍了一下项目依赖的概念。
?