美文网首页
史上最全的 Maven 教程 - 06 - Maven 依赖

史上最全的 Maven 教程 - 06 - Maven 依赖

作者: SanJinYe88 | 来源:发表于2018-09-03 10:04 被阅读0次

    Maven 依赖

    Maven 中最关键的部分, 使用 Maven 最主要就是使用它的依赖管理功能.

    (1) 添加依赖

    当 A.jar 包 使用到了 B.jar 包中的某些类时, A 就对 B 产生了依赖. 那么如何在项目中以依赖的方式引入我们需要的 jar 包呢?

    就是在 pom.xml 文件中, 使用 dependency 标签 指定被依赖的 jar 包的在本地仓库中的坐标就可以了.

        <!--添加依赖配置-->
        <dependencies>
    
            <!--项目要使用到 junit 的 jar 包,所以在这里添加 junit 的 jar 包的依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>
    
            <!--项目要使用到 Hello 的 jar 包,所以在这里添加 Hello 的 jar 包的依赖-->
            <dependency>
                <groupId>me.gacl.maven</groupId>
                <artifactId>Hello</artifactId>
                <version>0.0.1-SNAPSHOT</version>
                <scope>compile</scope>
            </dependency> 
       
        </dependencies>
    
    artifactld依赖的坐标
    exclusions用来排除传递性依赖
    groupld 依赖的坐标
    optional 标记依赖是否可迭
    scope 依赖范围默认为compile
    version依赖的坐标
    
    (2) 依赖的范围

    <scope> 标签可以设置依赖的范围. 可选值: compile , test , provided , runtime 四个.

    依赖范围 scope 用来控制依赖和 编译,测试,运行的 classpath 的关系.
    compile: 默认编译依赖范围。对于编译,测试,运行三种 classpath 都有效. 参与打包, 参与部署.
    test:测试依赖范围。只对于测试 classpath 有效. 不参与打包和部署.
    provided:已提供依赖范围。对于编译,测试的 classpath 都有效,但对于运行无效。 不参与打包和部署.
    runtime : 运行时提供.

    从项目结构的角度理解 compile 和 test 的不同.

    image.png

    对于该项目来说, 主程序是需要 Hello.jar 包中的类的, 测试程序由于要调用主程序, 所以也需要 Hello.jar 包中的类.
    所以 Hello.jar 是 compile 范围的依赖, compile 范围的依赖对于主程序和测试程序都应该有效.

    而对于 Junit.jar 中的类, 只有在测试程序中才会使用到, 主程序是不需要的.
    所以 Junit.jar 是 test 范围的依赖, test 范围的依赖只对于测试有效.

    (3) 依赖的传递性

    如果项目 A 依赖于项目 B,项目 B 自身依赖于项目 C,那么项目 A 它也依赖于项目 C 的依赖。注意: 这种依赖是基于 compile 这个范围进行依赖的.

    image.png
    (4) 依赖传递性的架包冲突问题
    image.png
    (6) 统一管理所依赖的 jar 包的版本

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

    ① 统一定义版本号. 标签 spring.version 是自定义标签, 可以写其他的.

         <!-- 统一定义版本号 -->
         <properties>
               <spring.version>4.3.7.RELEASE</spring.version>
               <mybatis.version>3.4.2</mybatis.version>
         </properties>
    

    ② 引用前面声明的 版本号

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    

    相关文章

      网友评论

          本文标题:史上最全的 Maven 教程 - 06 - Maven 依赖

          本文链接:https://www.haomeiwen.com/subject/bnhvwftx.html