前言

Spring Boot是一个简化Spring开发的框架。其设计目的是用来简化Spring应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,简化spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。这里关于SpringBoot介绍将不再赘述,从本文开始,将逐步学习总结一些在实地的业务场景开发。

首先,我们需要先了解一下如何基于IDEA和项目构建工具Maven搭建一个标准的,企业级应用开发的SpringBoot项目。关于Maven多模块、职责分明的构建原则,分析如下:

这里关于构建一个标准的SpringBoot单模块项目不再赘述,我们直接步入正题,开始构建一个多模块的SpringBoot项目。


1、构建一个多模块SpringBoot项目

1.1 项目介绍

本次测试项目包含一个父模块工程 的ncp和 四 个子模块ncp-base, ncp-dao, ncp-service, ncp-web), ncp-base 模块作为基础公共模块供其它其他三个模块的依赖使用。这四个child模块都依赖父模块, 各自的依赖关系如下:

ncp-dao 依赖 ncp-base;

ncp-service 依赖 ncp-dao,即间接依赖 ncp-base;  

ncp-web 依赖 ncp-service,即间接依赖ncp-base和ncp-dao。

依赖关系如下图:

1.2 搭建方式

首先,创建一个 Spring Initializr工程ncp作为父级工程;

然后,在父工程下再创建四个子 Module(ncp-base, ncp-dao, ncp-service, ncp-web)工程。

实际上,这四个子model就是四个普通的Spring Initializr工程。

1.3 父级工程

首先创建一个Spring Initializr项目:ncp

这个工程可作为父级工程,创建过程与常规的SpringBoot项目创建一样,并无区别

1.4 子module模块工程

【1】首先,改造先前创建的父级工程,只保留.idea文件夹、pom.xml 文件及 *.iml 文件。

【2】创建子模块 Module (ncp-base, ncp-dao,  ncp-service 和 ncp-web)

先创建ncp-base子工程 。右键父级项目ncp--->NEW---->Module。

创建一个Spring Initializr工程。

这里,需要注意,我们的项目名称选择

上图,我们已经在父级项目ncp下创建了一个子module工程:ncp-base

但是,这里还不够,还需要修改各自的pom文件配置信息。

首先,在ncp-base工程中声明父级工程。

注意:此时demo-base继承的是 SpringBoot提供的父工程,在其pom.xml中修改<parent></parent>

的父级版本信息, 修改成父项目 ncp信息。当然,为了省事,我们可以将父项目 ncp.pom文件的版本信息粘贴到 ncp-base             中即可)  

【3】修改子module的 ncp-base.xml文件

    <!--声明父级ncp项目信息,表名当前工程继承了父级项目的基础配置信息--><parent><groupId>ncp</groupId><artifactId>ncp</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/></parent>

【4】修改父级项目ncp.xml文件

    <!--子模块配置--><modules><module>ncp-base</module></modules>

实际上,ncp-dao、ncp-service的创建过程是一样的,只需要修改对应的配置信息即可。

接下来,我们创建一个ncp-web子module,创建过程雷同,只需注意要 添加 web依赖即可。

创建完成后的多模块工程结构如下图:

但是,上边的多模块项目并不合理,这里我们需要分别改造一下各项目模块。

1.5 注意事项

SpringBoot项目启动需要一个启动入口类,这里我们有四个子module都有启动类和资源配置文件。因此,我们需要注意我们的启动类是在ncp-web项目开始作为入口,其它子module可以删除对应的启动类和resources文件下的内容。

1.6 子module的依赖配置

分别修正子module的依赖配置,这里主要在对应的pom文件内,<dependency><dependency/>中就像引入普通的jar包依赖那样。

【1】ncp-dao的依赖信息配置,主要依赖ncp-base

<dependencies><!--添加ncp-base依赖--><dependency><groupId>ncp</groupId><artifactId>ncp-base</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>
</dependencies>

【2】ncp-service的依赖信息配置,主要依赖ncp-dao

<dependencies><!--添加ncp-dao依赖--><dependency><groupId>ncp</groupId><artifactId>ncp-dao</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>
</dependencies>

【3】ncp-web的依赖信息配置,主要依赖ncp-service

<dependencies><!--添加ncp-service依赖--><dependency><groupId>ncp</groupId><artifactId>ncp-service</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>
</dependencies>

2、测试

测试项目就按照常规的功能划分,在不同的子Module中建立对应的分层代码即可。

未完待续... ...


愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

SpringBoot系列(4):构建一个多模块SpringBoot项目相关推荐

  1. 机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)

    上一篇机器学习入门系列(1)–机器学习概览简单介绍了机器学习的一些基本概念,包括定义.优缺点.机器学习任务的划分等等. 接下来计划通过几篇文章来介绍下,一个完整的机器学习项目的实现步骤会分为几步,最后 ...

  2. .Net中的AOP系列之构建一个汽车租赁应用

    返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...

  3. Net中的AOP系列之构建一个汽车租赁应用

    本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS 2013 Update 5(建议最好使用集成了Nug ...

  4. SpringBoot系列之(二):1.使用SpringBoot

    一.构建系统 1.依赖管理 1.1.依赖管理工具:maven/gradle/ant 1.2.依赖管理 1.2.1.默认(建议使用) 从spring initializr(https://start.s ...

  5. [Android5 系列—] 1. 构建一个简单的用户界面

    前言 安卓应用的用户界面是构建在View 和ViewGroup 这两个物件的层级之上的. View 就是一般的UI组件,像按钮,输入框等. viewGroup 是一些不可见的view的容器,用来定义子 ...

  6. 【笑小枫的SpringBoot系列】【十五】SpringBoot根据模板生成Word

    通过maven引入需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifact ...

  7. SpringBoot 系列教程(四十六):SpringBoot集成i18n国际化配置

    一.概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationalization ...

  8. 【笑小枫的SpringBoot系列】【十六】SpringBoot生成PDF

    关于笑小枫

  9. 利用vue-cli(脚手架)一步一步构建一个仿当当网项目

    项目图 开发环境的搭建 这里我就不多叙述了,直接看我的这个文章有详细步骤 vue项目构建步骤 开发环境统一化 用一个插件 ESLint 我用的是vscode,所以就直接在插件里面下载了. 项目中已经自 ...

  10. glup 构建一个完整的jquery项目

    1-gulp目录说明: glup dev 开发环境 var gulp = require('gulp'); var babel = require("gulp-babel"); v ...

最新文章

  1. 基于概率论的生成式建模新模式
  2. 高级软件工程第二次作业
  3. Redis五大数据结构
  4. (十二)算法设计思想之“分而治之”
  5. [IE技巧] 让IE 以全屏模式启动
  6. R语言基础入门(7)之数据类型的性质
  7. 使用逻辑回归制作评分卡
  8. linux内核定时器死机,浅析linux内核中timer定时器的生成和sofirq软中断调用流程
  9. oracle 查看 统计更新时间,oracle查看和更新统计表的信息
  10. 在VS2017(VC15)上配置opencv4.0.1环境
  11. 模拟电子技术基础简明课程(第三版)思维导图
  12. Android MediaPlayer+Stagefright框架(音频)图解
  13. C# 使用Aspose.Word将Word书签的数据进行替换 包含打印
  14. 个人学习java的真实经历!
  15. 直方图均衡(HE)与局部色调映射(LTM)
  16. 读《出梁庄记》乱摘2
  17. pytorch gpu版本安装
  18. 影评系统的机遇和挑战
  19. 成熟才是男人应该有的标志//2021-2-15
  20. 第一周 一起走进摄影世界

热门文章

  1. 最小二乘法滤波 c语言,线性回归,最小二乘法 C语言实现
  2. mysqlplus 字段验证策略fieldStrategy
  3. 思科、华为、华三交换机的线缆检测功能
  4. python编程从入门到实战1-3章
  5. Go语言内幕(1):主要概念与项目结构
  6. 关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章2
  7. 找出唯一出现一次的数
  8. 轻松搞定技术面系列 1——基础篇
  9. c#_delegate_异步调用_BeginInvoke
  10. 如何用弹出窗口显示进度 - 回复 嘿嘿嘿 的问题