八.mavne依赖特性

前端之家收集整理的这篇文章主要介绍了八.mavne依赖特性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1.依赖范围:<scope>依赖范围</scope>
            1.test:测试范围,编译和打包都不会引入依赖
            2.compile:编译范围,编译和打包都会加入依赖
            3.provided:编译和测试时的范围,打包时不会加入依赖,如:servlet-api,因为tomcao自带的有,打包时加入会冲突
            4.runtime:运行时范围,编译和打包时不加入依赖,如:数据库驱动
            5.system: Maven直接从本地文件系统解析构件(从本地文件系统找依赖)   
            6.systemPath: 仅用于范围为system。提供相应的路径   
            7.optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
            8.缺省默认为compile

    2.依赖传递:
        1.当某个项目引入了别的项目,别的项目所需要的jar等都会自动引入这个项目,(只会传递compile范围的依赖,test范围的依赖不会传递)
        2.A被B依赖,B被C依赖,A的依赖会传递给C,可以使用依赖排除去掉依赖
    3.依赖选择:
            1.依赖级别相同:当A项目和B项目依赖了两个不同版本的jar,C同时依赖了A和B,那么C接受依赖传递的jar的版本为pom.xml
                           先引入依赖的项目的jar的版本
            2.依赖级别不同:当A项目和B项目依赖了两个不同版本的jar,那么C接受依赖传递的jar的版本为pom.xml(最短路径选择)
                           依赖的项目的jar的顶级依赖jar的顺序选择
            3.另一篇博文的借鉴:
                a.最短路径原则:如果A对于依赖路径中有两个相同的jar包,那么选择路径短的那个包,路径最近者优先,上述会选X(2.0)。
                b.第一声明优先原则:如果A对于依赖路径中有两个相同的jar包,路径长度也相同,那么依赖写在前面的优先。例如:A->B->F(1.0),A->C->F(2.0),会选F(1.0)。
                c.可选依赖不会被传递,如A->B,B->C,B->D,A对B直接依赖,B对C和D是可选依赖,那么在A中不会引入C和D。可选依赖通过optional元素配置,true表示可选。如果要在A项目中使用C或者D则需要显式地声明C或者D依赖。

    4.依赖排除:当B项目依赖A项目但不想接受A项目的某个jar包的传递,可以使用依赖排除
            在pom.xml中添加:
            <dependency>
                <groupId>mymaven</groupId>
                <artifactId>A</artifactId>
                <version>0.0.1-SANPSHOP</version>
                <!-- 禁止某个jar(log4j)的依赖传递 -->
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </dependency>

猜你在找的设计模式相关文章