基于SpringBoot构建分模块项目
前言
步骤过于详细,多图慎入!!!
假设一个场景,要开发一个4s店维修部的办公系统,其功能有:前台接待,维修抢单,财务结算,库存管理。于是我们创建一个项目balabalabala写完交工。
一段时间后,客户提出,库存管理出现了重大调整。于是我们二次开发,写好之后,告知客户:“系统更新,所有部门暂停使用15分钟、、、”。于是,客户排队,维修停工,结算暂停、、、店内一片慌乱。
又一段时间后,客户提出,财务结算需要修改。于是我们再次开发,写好之后,告知客户:“系统更新,所有部门暂停使用15分钟、、、”。于是,客户排队,维修停工,仓库休息、、、店内一片慌乱。
双一段时间后,客户提出、、、
叒一段时间后,客户开始抱怨:“我只是调整某一个部门的业务,你们能不能不要把整个系统停掉,这样损失太大了、、、”
于是你对每个功能做一个系统,接待系统,维修系统,财务系统,库存系统。四个系统应运而生;
叕一段时间后,客户提出,你看登录后这个位置啊,把我的名字写到公司名字下面,还要把十几个股东的资料展示出来,还有、、、
于是你带着需求回去面对四个系统的相同功能修改、、、卒!
采用分模块的方式构建项目就是将上例中用到的两种方式结合在一起,简而言之就是将一个大的项目拆分成小的模块,各功能之间互不干扰又可实现共用基础参数;
构建
以上述需求为例,我们在拆分之时,根据需求,将其分成
父模块
erp-common
erp-service
erp-service-impl
erp-web-reception
erp-web-finance
erp-web-fix
erp-web-repertory
创建父模块
构建分模块项目的时候首先需要创建一个父级的模块,所有的子模块均继承自父模块。因为我们整体架构采用SpringBoot构建,所以父模块要创建为SpringBoot项目
选择Spring Initializr --> Next

填写项目名称,选择JDK版本,其他无需修改 --> Next
Group: 一般为公司域名倒置
Artifact: 项目名

选择SpringBoot版本,其他无需勾选 --> Next

填写项目名、项目地址 --> Finish

创建之后,项目结构如下,删除如下选中部分文件

至此,父模块创建完成,此时的pom文件如下,此pom即是下文所说的父pom文件

创建 erp-common
erp-common模块我们约定只存放实体类,工具类,常量类、异常类等一些共用且不需要交由Spring管理的类,因此创建的时候不需要它是一个SpringBoot项目,只需要创建为传统的Maven项目即可;
选中我们的项目名Wayne-ERP,右键New --> Module

选择Maven,以表示我们创建的是一个Maven项目 --> Next

此处填写的artifactId就是我们的模块名,创建该模块时,如果第一步选中了父模块,那么此处GroupId和Version都会自动填充,如果没有自动填充,说明创建该模块的时候没有选中Wayne-ERP --> Next

该模块的名称以及该模块存放的位置,我一般在自动生成的名称中间加个
-就拿来直接使用了 --> Finish

最下面的pom.xml即是父pom,父pom内容如下,增加了一个module子模块

erp-common的pom文件如下,其中圈起部分为自己添加内容,relativePath 指向父pom位置

至此,erp-common模块创建完成,此时项目结构如下,

创建 erp-service
erp-service模块我们约定只存放service接口,因此也不需要交由Spring去管理,所以我们也将其创建为传统的Maven项目,创建方式与erp-common相同,此处不再赘述,如有不知道怎么操作的同学可私聊我或者发邮件给我
创建完成之后,此时父pom内容如下

erp-service的pom文件如下

创建erp-service-impl
erp-service-impl我们约定存放service实现类,即业务层代码,在Controller中需要用到自动注入,因此需要交由Spring管理,所以我们将其创建为SpringBoot项目。在创建Maven的子模块与创建SpringBoot的子模块有些差别,下面列出详细步骤;
选中项目名Wayne-ERP,右键New --> Module,在弹出的页面中选择Spring Initializr --> Next

此处Group需要手动填写,填好之后 --> Next

选择SpringBoot版本,与创建父模块时选择版本要保持一致

点击Next --> Finish
创建完成之后,需要在父pom中手动添加erp-service-impl子模块,并删除dependencies中的依赖

将erp-service-impl的pom文件中parent标签,手动替换为如下格式

此时项目结构如下,删除如下选中部分文件,因为我们程序的启动入口在erp-web-*,所以在erp-service-impl中不需要main方法(
SpringBoot是以Main方法启动的)

至此,erp-service-impl模块创建完成,整体项目结构如下

创建erp-web-repertory
此模块即是我们仓库管理系统的打包入口,启动入口,存放与仓管相关接口和页面
创建方式与erp-service-impl相似,此处需要修改Package内容,此处包名表示SpringBoot自动生成的main方法所在的位置,因为SpringBoot基于main方法启动时,默认会自动扫描本包及本包下所有子包的内容,所以我们将main方法向外提一层;

此处表示SpringBoot创建好之后,自动添加的依赖,我们只选择Web即可,表明这是一个Web项目,后续需要用到第三方框架,我们再自行整合;

其余步骤与erp-service-impl相似,只是不需要删除自动生成的文件,此时项目接口如下:

创建其余web模块
此时我们还剩erp-web-reception、erp-web-finance、erp-web-fix没有创建,这三个模块与erp-web-repertory创建方式相同,此处就不再赘述,只需注意命名问题即可;
完整项目结构:

依赖
各个模块已经创建完成,还剩下的就是各个模块之间的依赖关系了,各模块之间应该怎么依赖呢?具体的哪个包又应该放在哪个模块下面的?我整理一张图片供大家参考:

pom文件如下:

web模块pom基本相似,都只引入erp-service-impl即可,在此只列举一个

运行
每个web模块对应一个main方法,启动时找到各自的main方法,点击启动即可,idea一般会自动检测SpringBoot程序入口,想跑哪个点哪个~~

扩展
另一种模块结构,感兴趣的可以发邮件与我;

占位符
常规占位 (¬_¬)…
基于SpringBoot构建分模块项目的更多相关文章
- Spring-Boot构建多模块项目
Spring-Boot构建多模块项目 功能模块单独项目开发,可以将一个庞大的项目分解成多个小项目,便于细分开发 Maven多模块项目不能独立存在,必须有一个介质来包含. 1.创建一个Maven 项目, ...
- 基于SpringBoot的多模块项目引入其他模块时@Autowired无法注入其他模块stereotype注解类对象的问题解决
类似问题: 关于spring boot自动注入出现Consider defining a bean of type 'xxx' in your configuration问题解决方案 排查原因总结如下 ...
- SpringBoot+Maven 多模块项目的构建、运行、打包实战
前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...
- SpringBoot+Maven 多模块项目的构建、运行、打包
SpringBoot+Maven 多模块项目的构建.运行.打包 https://blog.csdn.net/zekeTao/article/details/79413919
- 利用springboot创建多模块项目
本文旨在用最通俗的语言讲述最枯燥的基本知识 最近要对一个不大不小的项目进行重构,用spring觉得太过于繁琐,用cloud又有觉得过于庞大,维护的人手不够:权衡之下,最终选了springboot作为架 ...
- 使用Maven构建多模块项目
[转] 使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务 ...
- maven 单独构建多模块项目中的单个模块
maven 单独构建多模块项目中的单个模块, maven选项说明 -pl, --projects Build specified reactor projects instead of all pro ...
- java分模块项目在idea中使用maven打包失败(ps:maven常用到的命令)
一.分模块项目打包失败 情况:项目是分模块创建的,一些公共的方法是单独的一个模块common,其他模块依赖于此模块,poom依赖已经添加了,项目可以正常运行,但使用maven打包时出现了问题:找不到依 ...
- Maven学习(五)使用Maven构建多模块项目
使用Maven构建多模块项目 一般的web项目构成: 建立解决方案目录parent 首先使用命令进入到我们需要建立maven项目的目录: mvn archetype:generate -DgroupI ...
随机推荐
- ZOJ - 4016 Mergeable Stack 【LIST】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016 题意 模拟栈的三种操作 第一种 push 将指定元素压入指 ...
- PAT 甲级 1104. Sum of Number Segments (20) 【数学】
题目链接 https://www.patest.cn/contests/pat-a-practise/1104 思路 最容易想到的一个思路就是 遍历一下所有组合 加一遍 但 时间复杂度 太大 会超时 ...
- Linux--struct file结构体【转】
本文转载自:https://www.cnblogs.com/hanxiaoyu/p/5677677.html struct file(file结构体): struct file结构体定义在includ ...
- 计算机行业工作者-->面试的总结博文(【*持续补充】)
1.博文题目:找实习/工作经验心得分享-偏IT技术向 http://blog.csdn.net/koudaidai/article/details/8063288 2.博文题目:百度,阿里 笔试面试 ...
- 三款功能强大代码比较工具Beyond compare、DiffMerge、WinMerge
我们经常会遇到需要比较同一文件的不同版本,特别是代码文件.如果人工去对比查看,势必费时实力还会出现纰漏和错误,因此我们需要借助一些代码比较的工具来自动完成这些工作.这里介绍3款比较流行且功能强大的工具 ...
- Spring注解实现原理
[Spring如何使用注解机制完成自动装配] Java实例构造时会调用默认父类无参构造方法,Spring正是利用了这一点,让"操作元素的代码"得以执行. [两种处理策略] ( ...
- PS 滤镜— —水波效果
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...
- LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
原题链接在这里:https://leetcode.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list/ 题目: C ...
- ubuntu强制卸载软件
以卸载cups为例子 一:列出软件列表,找到需要卸载的软件的名字命令:dpkg --list
- ubuntu关闭cups服务
本人使用的ubuntu10.10每次开机时使用nmap扫描127.0.0.1的时候总是能发现一个631端口开启,在/etc/services找到 631端口是网络打印机服务,但对于我一个普通用户来说这 ...