maven-两大依赖原则

两大依赖原则-深度原则和顺序原则

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>

参考

https://www.dazhuanlan.com/2019/08/15/5d551181bf3a7/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值