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依赖范围
Maven依赖范围
97 0
|
4月前
|
Java Maven
maven 依赖剔除处理
maven 依赖剔除处理
24 0
|
4月前
|
Java 程序员 应用服务中间件
maven-依赖管理-下
maven-依赖管理-下
49 0
|
4月前
|
存储 Java 测试技术
JAVA-MAVEN初学者教程(配置、pom.xml、依赖管理等)
JAVA-MAVEN初学者教程(配置、pom.xml、依赖管理等)
242 0
|
4月前
|
存储 Oracle Java
Maven高级-私服简介与安装及私服仓库分类
Maven高级-私服简介与安装及私服仓库分类
62 0
|
16天前
|
Java 应用服务中间件 Maven
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
14 1
|
20天前
|
Java Maven
SpringMVC常用Maven POM.xml依赖包片段
SpringMVC常用Maven POM.xml依赖包片段
|
1月前
|
Java Maven
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
21 0
|
1月前
|
Java Maven
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
20 0
|
1月前
|
Java Maven
idea的Maven依赖问题
idea的Maven依赖问题

热门文章

最新文章

推荐镜像

更多