• Maven高级-分模块开发和设计及依赖管理


    目录

    一、分模块开发意义

    二、分模块开发

    三、依赖管理

    依赖传递

    依赖传递冲突问题

    可选依赖与排除依赖 


    一、分模块开发意义

    将原始的模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享

     好处:可以对这个模块独立维护,其次别人在使用你的模块时也会很方便

    (1)按照功能拆分

    我们现在的项目都是在一个模块中,比如前面的SSM整合开发。虽然这样做功能也都实现了,但是也存在了一些问题,我们拿银行的项目为例来聊聊这个事。

    ■ 网络没有那么发达的时候,我们需要到银行柜台或者取款机进行业务操作

    ■ 随着互联网的发展,我们有了电脑以后,就可以在网页上登录银行网站使用U盾进行业务操作

    ■ 再来就是随着智能手机的普及,我们只需要用手机登录APP就可以进行业务操作

    上面三个场景出现的时间是不相同的,如果非要把三个场景的模块代码放入到一个项目,那么当其中某一个模块代码出现问题,就会导致整个项目无法正常启动,从而导致银行的多个业务都无法正常班理。所以我们会按照功能将项目进行拆分。

    (2)按照模块拆分

    比如电商的项目中,有订单和商品两个模块,订单中需要包含商品的详细信息,所以需要商品的模型类,商品模块也会用到商品的模型类,这个时候如果两个模块中都写模型类,就会出现重复代码,后期的维护成本就比较高。我们就想能不能将它们公共的部分抽取成一个独立的模块,其他模块要想使用可以像添加第三方jar包依赖一样来使用我们自己抽取的模块,这样就解决了代码重复的问题,这种拆分方式就说我们所说的按照模块拆分。

    二、分模块开发

    1、创建Maven模块

     2、书写模块代码

    注意:分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分

    3、通过maven指令安装模块到本地仓库(install指令)

    注意:团队内部开发需要发布模块功能到团队内部可共享的仓库中(私服)

    三、依赖管理

    依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

    格式:

    1. <!--设置当前项目所依赖的所有jar-->
    2. <dependencies>
    3.         <!--设置具体的依赖-->
    4.         <dependency>
    5.                 <!--设置所属的群组id-->
    6.                 <groupId>org.springframework</groupId>
    7.                 <!--依赖所属项目id-->
    8.                 <artifactId>spring-webmvc</artifactId>
    9.                 <!--依赖版本号-->
    10.                 <version>5.2.10.RELEASE</version>
    11.         </dependency>
    12. </dependencies>

    依赖传递

    依赖具有传递性

    直接依赖:在当前项目中通过依赖配置建立的依赖关系

    间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

    依赖传递冲突问题

    路径优先:当前依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高

    声明优先,当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

    特殊优先:当同级配置相同资源的不同版本,后配置的覆盖先配置的

    可选依赖与排除依赖 

    可选依赖指对外隐藏当前所依赖的资源——不透明

    1. <dependency>
    2. <groupId>com.itheima</groupId>
    3. <artifactId>maven_03_pojo</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. <!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递-->
    6. <optional>false</optional>
    7. </dependency>

    true为默认,false为隐藏此依赖。

    排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要

    1. <dependency>
    2. <groupId>com.itheima</groupId>
    3. <artifactId>maven_04_dao</artifactId>
    4. <version>1.0-SNAPSHOT</version>
    5. <!--排除依赖是隐藏当前资源对应的依赖关系-->
    6. <exclusions>
    7. <exclusion>
    8. <groupId>com.itheima</groupId>
    9. <artifactId>maven_03_pojo</artifactId>
    10. </exclusion>
    11. <exclusion>
    12. <groupId>log4j</groupId>
    13. <artifactId>log4j</artifactId>
    14. </exclusion>
    15. <exclusion>
    16. <groupId>org.mybatis</groupId>
    17. <artifactId>mybatis</artifactId>
    18. </exclusion>
    19. </exclusions>
    20. </dependency>

    排除依赖资源仅指定GA即可,无需指定V

    介绍我这两种方式后,简单来梳理下:

    ■ A依赖B,B依赖C , C通过依赖传递会被A使用到,现在要想办法让A不去依赖C

    ■ 可选依赖是在B上设置<optional> , A不知道有C的存在,

    ■ 排除依赖是在A上设置<exclusions> , A知道有C的存在,主动将其排除掉。

  • 相关阅读:
    vsftpd配置
    Linux 修改SSH端口
    java计算机毕业设计-学生宿舍故障报修管理信息系统-源程序+mysql+系统+lw文档+远程调试
    【6】uniform颜色写入
    【OpenCV】- 图像修复
    Linux定时器
    vue2 中this.$emit(“update:xx“,value)和xx.sync的用法
    spring 微服务nacos未授权访问漏洞修复
    JAVA面试题|AQS详细剖析
    高清实拍类型视频素材去哪里找?高清实拍素材网站分享
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/125624044