zoukankan      html  css  js  c++  java
  • Maven 依赖管理

      1  概念介绍

        之前我们说过,maven 坐标能够确定一个项目。换句话说,我们可以用它来解决依赖关系。在 POM 中,依赖关系是在 dependencies部分中定义的。在上面的 POM 例子中,我们用 dependencies 定义了对于 junit 的依赖:

    1. <dependencies>   
    2.     <dependency>   
    3.       <groupId>junit</groupId>   
    4.       <artifactId>junit</artifactId>   
    5.       <version>3.8.1</version>   
    6.       <scope>test</scope>   
    7.     </dependency>   
    8.   </dependencies>   

        我们依赖的类库,我们都可以到Maven的中央仓库去找,例如下图找hibernate的核心包:mvnrepository.com/search.html?query=hibernate

        


        上面的例子很简单,但是实际开发中我们会有复杂得多的依赖关系,因为被依赖的 jar 文件会有自己的依赖关系。那么我们是不是需要把那些间接依赖的 jar 文件也都定义在POM中呢?答案是不需要,因为 maven 提供了传递依赖的特性。

        所谓传递依赖是指 maven 会检查被依赖的 jar 文件,把它的依赖关系纳入最终解决的依赖关系链中。针对上面的 junit 依赖关系,如果你看一下 maven 的本地库你会发现 maven 不但下载了 junit-3.8.1.jar,还下载了它的 POM 文件。这样 maven 就能检查 junit 的依赖关系,把它所需要的依赖也包括进来。

        在 POM 的 dependencies 部分中,scope 决定了依赖关系的适用范围。我们还可以指定scope 为 provided,意思是 JDK 或者容器会提供所需的jar文件。比如说在做web应用开发的时候,我们在编译的时候需要servlet API jar 文件,但是在打包的时候不需要把这个 jar文件打在 WAR 中,因为servlet容器或者应用服务器会提供的。

        scope 的默认值是 compile,即任何时候都会被包含在 classpath 中,在打包的时候也会被包括进去。


      2  依赖的范围(scope)

        有如下几种:

        test

          指测试范围有效,编译和打包时都不使用该依赖。

        compile:(为默认值)

          编译范围有效,编译和运行(打包)时都会将依赖存进去

        provided

          测试、编译范围都有效,最后生成war包时不会加入,例如:servlet-api,编译的时候需要该文件,但是在打包的时候不需要把这个 jar 文件打在 WAR 中,因为servlet容器或者应用服务器会提供的。打进去会出现冲突。

        runtime

              编译时不依赖,运行(打包)时依赖

        


      3  依赖的传递(间接依赖)

        首先,依赖是可以传递的

        


        当依赖层级相同的时候,相同的东西,会采用,近者优先。当依赖层级不同时,层级(最短)近的优先。

        


      4  排除依赖

        当依赖包发生冲突时,我们可以用exclusion标签排除依赖

        





  • 相关阅读:
    如何在调试PHP代码时不显示错误信息
    如何实现网页组件的随意拖拽
    如何做一个简易的HTML代码编辑器
    如何在网页中动态显示时间
    Luogu2577 | [ZJOI2005]午餐 (贪心+DP)
    Luogu2345 | 奶牛集会 (树状数组)
    解决NahimicSvc32.exe与bilibili直播姬的音频不兼容的问题
    STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法
    电子取证 | 第三届美亚杯(2017)个人赛题解
    快速安装字体.bat批处理脚本
  • 原文地址:https://www.cnblogs.com/jeffen/p/6133250.html
Copyright © 2011-2022 走看看