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

目录

一、分模块开发意义

二、分模块开发

三、依赖管理

依赖传递

依赖传递冲突问题

可选依赖与排除依赖 


一、分模块开发意义

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

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

(1)按照功能拆分

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

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

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

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

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

(2)按照模块拆分

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

二、分模块开发

1、创建Maven模块

 2、书写模块代码

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

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

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

三、依赖管理

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

格式:

<!--设置当前项目所依赖的所有jar-->
<dependencies>
        <!--设置具体的依赖-->
        <dependency>
                <!--设置所属的群组id-->
                <groupId>org.springframework</groupId>
                <!--依赖所属项目id-->
                <artifactId>spring-webmvc</artifactId>
                <!--依赖版本号-->
                <version>5.2.10.RELEASE</version>
        </dependency>
</dependencies>

依赖传递

依赖具有传递性

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

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

依赖传递冲突问题

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

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

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

可选依赖与排除依赖 

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

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

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

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

<dependency> 
    <groupId>com.itheima</groupId> 
    <artifactId>maven_04_dao</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <!--排除依赖是隐藏当前资源对应的依赖关系--> 
    <exclusions> 
        <exclusion> 
            <groupId>com.itheima</groupId> 
            <artifactId>maven_03_pojo</artifactId> 
        </exclusion> 
        <exclusion> 
            <groupId>log4j</groupId> 
            <artifactId>log4j</artifactId> 
        </exclusion> 
        <exclusion> 
            <groupId>org.mybatis</groupId> 
            <artifactId>mybatis</artifactId> 
        </exclusion> 
    </exclusions> 
</dependency>

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

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

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

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

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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏志121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值