• 依赖


    【依赖】

    Maven 中最关键的部分,我们使用 Maven 最主要的就是使用它的依赖管理功能。要理解和掌握 Maven的依赖管理,我们只需要解决一下几个问题:

    ①依赖的目的是什么

    当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目中以依赖的方式引入一个我们需要的 jar 包呢?

    答案非常简单,就是使用 dependency 标签指定被依赖 jar 包的坐标就可以了。

    1 <dependency>
    2 <groupId> com.hk.maven </groupId>
    3 <artifactId> Hello </artifactId>
    4 <version> 0.0.1- - SNAPSHOT </version>
    5 <scope>compile</scope>
    6 </dependency>
    ②依赖的范围

    大家注意到上面的依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范围有几个可选值,我们用得到的是:compile、test、provided 三个。

    [1]从项目结构角度理解 compile 和 test 的区别

    结合具体例子:对于 HelloFriend 来说,Hello 就是服务于主程序的,junit 是服务于测试程序的。

    HelloFriend 主程序需要 Hello 是非常明显的,测试程序由于要调用主程序所以也需要 Hello,所以compile 范围依赖对主程序和测试程序都应该有效。

    HelloFriend 的测试程序部分需要 junit 也是非常明显的,而主程序是不需要的,所以 test 范围依赖仅仅对于主程序有效。

    [2]从开发和运行这两个不同阶段理解 compile 和 provided 的区别

    [3]有效性总结

    ③依赖的传递性

    A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不可用。

    ④依赖的排除

    如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时候将 B 排除。

    [1]情景举例

    [2]配置方式

    [3]排除后的效果

    ⑤统一管理所依赖 jar 包的版本

    对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提取出来

    [1]统一声明版本号
    <properties>
         <hk.spring.version>4.1.1.RELEASE</hk.spring.version>
    </properties>

    其中 hk.spring.version 部分是自定义标签。

    [2]引用前面声明的版本号
    <dependencies>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-core</artifactId>
           <version> ${hk.spring.version}</version>
       </dependency>
    ……
    </dependencies>
    [3]其他用法
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    ⑥依赖的原则:解决 jar 包冲突
    [1]路径最短者优先

     [2]路径相同时先声明者优先

    这里“声明”的先后顺序指的是 dependency 标签配置的先后顺序。

    每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
  • 相关阅读:
    makeBackronym
    Regular Ball Super Ball
    Svn忽略配置
    How does it work in C#?
    Counting sheep...
    Convert boolean values to strings 'Yes' or 'No'.
    codeforces 236A . Boy or Girl(串水问题)
    cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()
    ACM字符串处理算法经典:字符串搜索
    MessageFormat类别:快速格式化字符串
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9722585.html
Copyright © 2020-2023  润新知