1

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

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/20...


Java个体户
17 声望4 粉丝

Java个体户


引用和评论

0 条评论