Maven聚合工程

举报
i进击的攻城狮 发表于 2022/04/09 18:46:17 2022/04/09
【摘要】 maven的模块不必普通的包酷吗

maven是我们一款常用的工具,可以使用maven去maven的中央仓库下载我们需要的依赖,摒弃传统以jar包导入外部代码的方式。
其实,maven除了可以通过pom坐标的方式去引入依赖,我们还可以通过maven聚合工程的方式去实现模块的复用。

一、单体项目

我们传统的项目,一般后端采样MVC的架构,会分层,分为dao层,service成,controller层,文件的目录如下,我们把各个模块分类放在不同的包中。
在这里插入图片描述
在一般的单体项目中,这种分类的方式还是很好用的,但是这种方法有一个缺点,在一些微服务项目中,比如电商系统,系统可能有一个前台商城页面,还有一个后台的商家管理系统,这两个系统都涉及对Goods商品类的依赖。你想想,商品前台模块和后台模块是两个系统,但是他们都涉及对商品的操作,于是他们必须在两个系统中同时创建一个Goods商品类和商品类的dao,一旦商品类要发生修改,所有带有商品类的工程也要修改。

二、maven聚合工程是什么

maven为了解决这个问题,使用聚合工程这个概念,就是把多个系统需要依赖的类,不再是把它放在一个包里边,而是将它放在一个maven工程里,maven再把这个模块,部署到maven仓库,之后如果其他模块需要这个类,就只需要导入maven坐标,而不用再新建类了,如果类要发生改变,也只需要改动一次后,重新部署到maven仓库了。
在这里插入图片描述
maven聚合项目结构一般如下图所示,每个模块不再是一个包,而是一个个maven工程。
在这里插入图片描述

三、maven工程的搭建

1、创建父级工程

maven聚合工程中,每个模块都是一个个的maven工程,他们每个子maven工程,依赖在一个父工程下,所以先创建一个父工程。
在这里插入图片描述
在这里插入图片描述
项目创建好后,设置打包方式为pom
在这里插入图片描述

2、创建子工程common

跟父级工程一样不选择模板,创建mall-common,
创建子模块后,默认的打开方式为jar包,无需显示指定
在这里插入图片描述
在这里插入图片描述
创建好工程后,查看父级工程pom中是否存在子模块的配置项
在这里插入图片描述

3、安装创建common的方法,创建web,mapper,service

在这里插入图片描述

4、设置模块之间的相互依赖

现在虽然dao,service,web模块都有了,但是他们并不是在一个工程里边,他们属于不同的maven工程,类和类之间是无法直接相互调用的,我们需要配置模块之间的相互依赖
在mapper中的pom配置加上:

<dependencies>
        <dependency>
            <groupId>com.mall</groupId>
            <artifactId>mall-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

在service的pom加上:

<dependencies>
        <dependency>
            <groupId>com.mall</groupId>
            <artifactId>mall-mapper</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

在web层的pom加上:

<dependencies>
        <dependency>
            <groupId>com.mall</groupId>
            <artifactId>mall-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

他们的依赖关系链是

web
service
mapper
common

这样配置后,父级模块就能调用子级模块和子级的子级中定义的类了。

5springboot的基本配置

项目最终想要启动起来,还是需要配置springboot
【1】在父级pom中添加依赖

<!--配置springboot
       引入依赖parent,完成之后就是springboot工程了
       作用:加载了很多的依赖
    -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/>
    </parent>
    <!--设置资源属性-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--引入核心依赖-->
    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <!--排除springboot默认的日志依赖-->
        <exclusions>
            <exclusion>
                <groupId>org.springframeork.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
            <!--排除logback日志-->
            <exclusion>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!--配置spring自带的web板块-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--配置解析xml-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
   </dependencies>

【2】application.properties
在web的resources下创建
在这里插入图片描述
在application.properties中添加配置端口:

#配置端口号
#配置服务器端口
server.port=8088
server.tomcat.uri-encoding=utf-8
server.max-http-header-size=80KB
server.servlet.context-path=/

【3】创建启动项application.java
在这里插入图片描述
【4】在web下创建controller测试类
在这里插入图片描述
访问接口
在这里插入图片描述

四、maven的模块复用

看的这里,maven工程已经搭建完毕了,但现在,对于这个工程而言,模块复用并没有体现出,但如果我们再建一个工程,这个工程和当前工程共用common模块的Goods类,来看看如何复用。
1、先创建Goods类
在这里插入图片描述
2、使用install把项目安装到本地仓库
在这里插入图片描述
3、在其他maven项目假如common坐标
在这里插入图片描述

4、使用Goods
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。