Maven多模块项目架构配置介绍和实战

这篇具有很好参考价值的文章主要介绍了Maven多模块项目架构配置介绍和实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文地址:https://ntopic.cn/p/2023071501/
源代码先行:

  • Gitee多模块项目仓库:https://gitee.com/obullxl/ntopic-boot
  • GitHub多模块项目仓库:https://github.com/obullxl/ntopic-boot

背景介绍

我们项目采用的是Maven多模块架构,我发现项目的部分子模块的pom.xml中重复引用了相同的JAR包。很明显,当初在配置Maven模块的时候,没有考虑清楚各个模块的架构职责,同时也不了解Maven模块依赖的传递性。本文主要介绍一下Maven多模块的配置思路和多模块的配置实操。

Maven多模块配置

在实操之前,我们先要了解配置概览,配置大致可分为三大步:确定项目需要哪几个模块,项目中的每个模块的依赖关系如何,最后根据依赖关系配置。

第一步:确定项目的模块划分

模块的划分没有任何强制要求,一般的划分思路如下:

  • test 集成测试模块:该模块除了测试用例代码外,没有实际业务逻辑。项目中我们用junit和Mockito测试框架比较多,Mockito集成测试框架和SpringBoot集成可我之前的博客:https://ntopic.cn/p/2023052001/
  • facade 对外服务接口模块(如果有的话,一般业务类项目较小,服务类较大):主要是对外提供服务接口、请求参数和返回结果等JAR包,其他项目需要依赖项目JAR包,因此需要单独一个模块
  • client 集成外部服务接口模块:和facade对应,如果依赖了外部服务的话
  • lang 基础公用模块:各个模块都会依赖的公共类模块,比如常用工具类、通用枚举等
  • das 数据访问模块:接入DB层的代码,包括DO/DAO等
  • service 领域核心服务模块:各个业务领域的核心服务逻辑
  • web/biz 业务模块:业务逻辑模块。如果业务比较复杂,可进一步拆分,如web-user/web-order等

根据上面说明,https://gitee.com/obullxl/ntopic-boot的模块划分如下:

  • ntopic-test 集成测试模块
  • ntopic 业务逻辑模块,包括SpringBoot启动类、Web模块、业务模块等
  • ntopic-servcie 领域核心服务
  • ntopic-client 外部服务器集成
  • ntopic-das DB操作
  • ntopic-lang 公共模块
IDEA代码结构 GitHub代码样例
Maven多模块项目架构配置介绍和实战 Maven多模块项目架构配置介绍和实战

第二步:确定各个模块的依赖关系

Maven模块的依赖具备传递性,即:若模块A依赖了模块B,模块B依赖了模块C,则模块A自动依赖了模块C(有点类似于数学中数值大小的传递性,A>B且B>C,则A>C)。
https://gitee.com/obullxl/ntopic-boot项目的各个模块依赖关系说明:

  • ntopic-test 集成测试模块:因为集成测试包括了所有的代码逻辑,所以它处于最上层
  • ntopic 业务模块,业务逻辑依赖service模块提供核心服务
  • ntopic-service 核心服务模块,它依赖DB数据读写和引入外部服务
  • ntopic-lang 公共逻辑模块,它进一步依赖其他统一模块,如commons模块等

Maven多模块项目架构配置介绍和实战

第三步:Maven多模块实操

多模块的核心在pom.xml文件中,任何一个pom.xml模块,都需要指定五个核心配置元素:

  • groupId 代表大分组,一般都是公司的域名,如 cn.ntopic / com.aliaba 等
  • artifactId 代表具体的JAR包名,如 sequence-jdbc / fastjson 等
  • version 代表JAR包版本,如 1.0.1 / 1.2.76 等
  • packaging 代表模块打包方式,默认都是jar,对于多模块的总模块或者父模块为pom
  • name 代表模块名称,可选配置,建议配置

总pom.xml文件

总pom.xml配置了整个项目的所有信息,包括项目的模块列表、依赖的JAR包、仓库和打包方式等。

  • 指定父模块:可选的,可以没有父模块。如ntopic-boot是基于SpringBoot框架,所以它的父模块是SpringBoot的。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/>
    </parent>

    <groupId>ntopic</groupId>
    <artifactId>ntopic-parent</artifactId>
    <version>1.0.1</version>
    <packaging>pom</packaging>

    <name>ntopic-parent</name>
  • 指定模块本项目的模块列表:
    <modules>
        <module>ntopic-test</module>
        <module>ntopic</module>
        <module>ntopic-service</module>
        <module>ntopic-das</module>
        <module>ntopic-client</module>
        <module>ntopic-lang</module>
    </modules>
  • 模块依赖管理,各个子模块中,可以直接使用这里配置的依赖:
    <dependencyManagement>
      <dependencies>
              <!-- NTopic Modules -->
              <dependency>
                  <groupId>ntopic</groupId>
                  <artifactId>ntopic-lang</artifactId>
                  <version>${ntopic.version}</version>
              </dependency>
              <dependency>
                  <groupId>ntopic</groupId>
                  <artifactId>ntopic-client</artifactId>
                  <version>${ntopic.version}</version>
              </dependency>
        <!-- 其他本项目子模块忽略 -->

        <!-- SpringBoot Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>${springboot.boot.version}</version>
        </dependency>

        <!--  Google Guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1.1-jre</version>
        </dependency>

        <!-- 其他省略 -->
        </dependencies>
    </dependencyManagement>
  • 额外的Maven仓库和打包方式配置:
    <repositories>
        <repository>
            <id>Gitee-obullxl</id>
            <url>https://gitee.com/obullxl/maven-repository/raw/sequence-jdbc</url>
        </repository>
    </repositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${springboot.boot.version}</version>
            </plugin>
        </plugins>
    </build>

子模块pom.xml文件

总模块配置好了之后,子模块的配置就简单多了,只需要配置3个信息块:父模块、四元素和依赖其它子模块。其中依赖的子模块按照第二步中的依赖关系配置即可:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>ntopic</groupId>
        <artifactId>ntopic-parent</artifactId>
        <version>1.0.1</version>
    </parent>

    <artifactId>ntopic-service</artifactId>
    <packaging>jar</packaging>
    <version>${ntopic.version}</version>

    <name>ntopic-service</name>

    <dependencies>
        <!-- NTopic Module -->
        <dependency>
            <groupId>ntopic</groupId>
            <artifactId>ntopic-das</artifactId>
        </dependency>
        <dependency>
            <groupId>ntopic</groupId>
            <artifactId>ntopic-client</artifactId>
        </dependency>
    </dependencies>
</project>

编译项目各个模块

经过上面的配置,项目Maven多模块架构已经配置完成,进行项目编译即可:

mvn compile

编译成功的结果:文章来源地址https://www.toymoban.com/news/detail-563890.html

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] ntopic-parent ...................................... SUCCESS [  0.022 s]
[INFO] ntopic-lang ........................................ SUCCESS [  0.873 s]
[INFO] ntopic-das ......................................... SUCCESS [  0.121 s]
[INFO] ntopic-client ...................................... SUCCESS [  0.042 s]
[INFO] ntopic-service ..................................... SUCCESS [  0.055 s]
[INFO] ntopic ............................................. SUCCESS [  0.073 s]
[INFO] ntopic-test ........................................ SUCCESS [  0.114 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.094 s
[INFO] Finished at: 2023-07-15T13:41:57+08:00
[INFO] Final Memory: 35M/448M
[INFO] ------------------------------------------------------------------------

到了这里,关于Maven多模块项目架构配置介绍和实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot多模块项目开发(Maven多模块项目)

    不论是maven还是Gradle,参考优秀的开源项目和boot官网的最佳实践使用构建工具组织代码来构建自己的项目,比如nacos、springboot,ruoyi等等; 要找到 Spring Boot 官网上关于 Maven 多模块项目的最佳实践,可以按照以下步骤进行: 打开 Spring Boot 官网(spring.io/projects/sp… 在导航菜单

    2024年02月04日
    浏览(40)
  • Maven(4)---Maven的多模块项目管理

    Maven的多模块项目管理 在前面的博客中,我们已经学习了Maven的基础知识、依赖管理、插件和生命周期。本篇博客将介绍Maven的多模块项目管理功能。 什么是多模块项目 多模块项目是指由多个相互关联的子模块组成的项目。每个子模块可以是一个独立的项目,也可以是一个功

    2024年02月05日
    浏览(39)
  • Maven(五)如何只打包项目某个模块及其依赖模块?

    在 SpringCloud 微服务框架下,会存在多个模块。当我们需要对其中某一个服务打包的时候,需要将该服务依赖的模块一起打包更新,如果项目比较小的话我们可以直接将项目中的所有模块进行 clean install 即可。 但是当项目运行一段时间后,项目中的代码量会变得很多,每个模

    2024年01月23日
    浏览(50)
  • Maven多模块项目版本统一管理

    如图所示,项目中定义了这样几个模块: pdd-workflow-build :定义项目版本,及全局配置 pdd-workflow-dependencies :外部依赖管理,统一管理所有用到的外部依赖的版本 pdd-workflow-service :项目service模块 pdd-workflow-web :项目web模块 pdd-parent :聚合模块 模块之间的继承依赖关系如下图

    2024年02月05日
    浏览(50)
  • Maven(4)-利用intellij idea创建maven 多模块项目

    本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具:intellij idea。 multi-module-project是主工程,里面包含两个模块(Module): web-app是应用层,用于界面展示,依赖于web-service参的服务。 web-service层是服务层,用于给app层提供服务。 新建一个空白标准maven

    2024年02月04日
    浏览(102)
  • 【 Maven 】花式玩法之多模块项目

    目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结   如果你有一个多模块项目,并且想将这些模块发布到不同的仓库或目标位置,你可以使用 Maven 的分

    2024年02月21日
    浏览(54)
  • IDEA 搭建 Maven模块化项目

    目录 1.前言 2. 软硬件环境 3.项目搭建 3.1.创建 SpringBoot 父项目 3.2. 构建子项目centerdao 3.3. 构建子项目centerweb 4. 建立父子 Module 依赖 4.1 删除不必要文件 4.2.修改 Parent 项目 packaging 4.3.修改子项目pom.xml 信息 4.4.补充说明 5. 项目继承关系 6. 验证项目 7.异常处理  8.结语 鸣谢    

    2024年02月04日
    浏览(49)
  • IDEA maven 向项目添加模块时出错创建项目失败

            选择 java 版本为1.8构建 即可成功,第一次maven项目建立的时候下图红框内容如图即可           通常发生在重设 maven 路径|仓库之后         请检查环境变量 或者更换版本 1--配置本地仓库:      修改maven 安装目录 conf/settings.xml      打开setting,搜索

    2024年02月06日
    浏览(50)
  • IDEA 中搭建 Spring Boot Maven 多模块项目 (父SpringBoot+子Maven)

    [Ref] 新建一个SpringBoot项目 删除无用的 .mvn 目录、 src 目录、 mvnw 及 mvnw.cmd 文件,最终只留 .gitignore 和 pom.xml ① 删除 dependencies 标签及其中的 spring-boot-starter 和 spring-boot-starter-test 依赖,因为 Spring Boot 提供的父工程已包含,并且父 pom 原则上都是通过 dependencyManagement 标签管理

    2024年01月20日
    浏览(74)
  • idea中maven项目模块变成灰色原因及解决方案

    1、idea中maven项目模块变成灰色 2、原因 可能是忽略了maven模块,可以尝试如下解决方法:在idea中设置setting-》搜索maven-》点击ignored files,看右边的面板中变灰的maven模块是否被勾选pom.xml 3、解决方案 去掉勾选的选项

    2024年02月16日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包