首页 技术 正文
技术 2022年11月6日
0 收藏 372 点赞 371 浏览 1336 个字

5.7依赖调解

1.当一个项目有以下依赖关系的时候:A->B->C->X(1.0)、A->D->X(2.0),X作为A的传递依赖而拥有两个版本,Maven为了解决以上问题,制定了一下规则:

Maven依赖调解第一原则:路径最近者优先。 即:第一条路径的路径长度为3,第二条路径的路径长度为2,则以X(2.0)会被解析使用

Maven依赖调解第二原则:第一声明者优先。即:当两条路径长度相同的时候,在POM中依赖的顺序靠前的会被解析使用。

2.当一个项目有一下依赖关系的时候:A->B、B->X(可选),B->Y(可选) 。根据传递性依赖的规定,如果这三个依赖范围都是compile的,那么A对于X,Y也是compile的,

但是在这里,X,Y都是可选依赖,依赖将不会传递,也就是说,X,Y与A没有任何关系。

使用<optional>声明可选依赖

//<optional>默认为false,
//当配置为true的时候,可以理解为表示依赖不向上传递

需要说明的是,设计良好的项目是不应该有可选依赖的,在面向对象的设计中,根据单一职责性原则,一个类,模块应该只有一项职责。针对可选依赖,可以做出如下应对:

对每个有可选依赖的模块单独划分为两个Maven项目,用户根据选择具体使用哪个模块。

这样的好处:

1.避免的可选依赖的不传递性,用户不用再单独的再项目中再次声明依赖

2.符合单一职责原则,用户对他们的依赖的作用更加明确

5.9 最佳实践

1.排除依赖:

当一个项目有一下依赖关系:A->B。但是A只是依赖于B的一部分的时候,有两种方式可以排除对B不需要的部分的传递的依赖:

第一种方式为在B的pom中将B不需要的部分声明为<optional>true</optional>,即可选的,

第二种方式为在A的pom中将B不需要的部分使用

<exclusions>
<exclusion>
<groupId>x</groupId>
<artifactId>x</artifactId>
</exclusion>
<exclusion>
<groupId>y</groupId>
<artifactId>y</artifactId>
</exclusion>
</exclusions>

类似以上的代码声明不需要依赖的B的依赖

2.归类依赖:

使用类似常量代替一类依赖的版本号。比如Spring Framework.这样当依赖升级的时候,只需要修改一处地方就行。

<properties>
<springframework.version>2.5.</springframework.version>
</properties>

3.优化依赖

使用

mvn dependency:list

查看当前已解析依赖

使用

mvn dependency:tree

查看当前依赖树

使用

mvn dependency:analyze

查看当前依赖的详细使用情况,

值得注意的是dependency会:

1.使用Used undeclared dependencies 指出当前未声明但是已经使用的依赖,对于这种依赖,我们应该显示声明它。

2.使用Unused declared dependencies 指出当前已声明但是未使用的依赖,对于这种依赖,不能简单的直接删除。若需要直接删除,也必须小心测试后再删除

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,565
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905