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

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

一、分模块开发意义

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

4047029e01ec42c388eb3e8ba6939067.png

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


(1)按照功能拆分


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


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

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

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


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


(2)按照模块拆分


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

二、分模块开发

1、创建Maven模块

109e305b660e4f729b1b9e8aad655e30.png

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>

依赖传递

依赖具有传递性


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


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

84dedcd7bdf44a10bb66da002c52f6ed.png

依赖传递冲突问题

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


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


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

可选依赖与排除依赖

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

<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的存在,主动将其排除掉。

目录
相关文章
|
3月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
16天前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
43 10
|
29天前
|
Java API Apache
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
|
1月前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
544 3
|
1月前
|
Java Maven
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
77 5
|
2月前
|
Java Maven
Maven 引入外部依赖
如果我们需要引入第三方库文件到项目,该怎么操作呢?
38 5
|
3月前
|
安全 Java Maven
优化Maven镜像配置:使用阿里云加速依赖下载
更新Maven镜像配置至关重要,尤其使用阿里云仓库时。在`settings.xml`中加入特定镜像配置可显著提升依赖下载速度。示例配置指定了阿里云镜像ID、替代表态仓库、安全的URL、默认布局及启用版本管理。需定位至用户目录下的`.m2/`文件夹编辑`settings.xml`,添加镜像信息后保存测试。若下载仍慢,考虑网络状况或备选镜像。多镜像设置时需注意避免冲突。
589 3
|
3月前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
209 1
|
3月前
|
Java Maven
intellij idea如何查看项目maven依赖关系图
这篇文章介绍了如何在IntelliJ IDEA中查看项目的Maven依赖关系图,包括使用Maven工具栏和相关操作来展示和查看依赖细节。
|
4月前
|
Java Maven
idea安装并使用maven依赖分析插件:Maven Helper
idea安装并使用maven依赖分析插件:Maven Helper
2602 7

推荐镜像

更多
下一篇
无影云桌面