两大依赖原则-深度原则和顺序原则
1、深度不同
最终使用的是最浅的,或者说路径最短的。
2、深度相同
按声明顺序,位置在最前面的优先级最高。
两大依赖原则对间接依赖也生效。
为什么有依赖原则,打包的时候还是会出现多个版本jar?
因为有可能jar的组的名字不一样,比如有的公司把jar组名字改为公司名字,如果组名字不一样,就算是不同的jar,所以导致会出现多个版本的jar,但是实际上是不同的jar。
依赖管理标签
会影响浅路径原则和申明顺序原则,导致原则失效。即dependencyManagement的优先级是最高的。
优点
可以写死指定jar版本,并且这里的优先级最高。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
最佳实践
如果有冲突,只使用直接依赖。而且最好间接依赖都排除。
间接依赖,升级版本之后,始终不生效
1.问题
间接依赖的jar,修改之后,没有生效。比如,a项目依赖了b.jar,b.jar又依赖了c.jar,现在升级了c.jar,a项目的c.jar版本始终是旧的。
2.原因
使用了依赖管理标签,并且在依赖管理标签里把jar的版本写死了,导致间接依赖升级版本之后但是没有生效。
3.解决方法
依赖管理标签,写死了,修改即可。所以,依赖管理标签,是第一优先级。
排除粒度
1、排除单个jar
2、排除组的jar
3、排除所有依赖jar
<dependency>
<groupId>com.xxx</groupId>
<artifactId>xxx-common-util</artifactId>
<version>1.0.4-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId> //排除整个组
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>com.dangdang</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId> //排除单个jar
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log-slf4j-logback</artifactId>
<groupId>kalvan.log</groupId>
</exclusion>
<exclusion>
<artifactId>cat-client</artifactId>
<groupId>com.dianping.cat</groupId>
</exclusion>
<exclusion>
<artifactId>hibernate-core</artifactId>
<groupId>org.hibernate</groupId>
</exclusion>
<exclusion>
<artifactId>hibernate-jpa</artifactId>
<groupId>org.hibernate</groupId>
</exclusion>
<exclusion>
<artifactId>hibernate-core</artifactId>
<groupId>paylib.hibernate</groupId>
</exclusion>
<exclusion>
<artifactId>hibernate-jpa2.0</artifactId>
<groupId>paylib.hibernate</groupId>
</exclusion>
<exclusion>
<artifactId>*</artifactId>
<groupId>paylib.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<exclusion>
<artifactId>*</artifactId>
<groupId>*</groupId> //排除所有jar
</exclusion>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。