如何借助Idea创建多模块的SpringBoot项目

目录

    • 1.1、前言
    • 1.2、开发环境
    • 1.3、项目多模块结构
    • 1.4、新建父工程
    • 1.5、创建子模块
    • 1.6、编辑父工程的pom.xml文件

1.1、前言

        springmvc项目,一般会把项目分成多个包:controler、service、dao、utl等,但是随着项目的复杂性提高,想复用其他一个模块的话,因为是包的形式,剥离出来会比较困难,耦合性有点强,常用的方法就是复制代码修改,但是这样会做很多无用功与增加出错几率。
        springboot多模块简单来说,就是把按包分模块的模式,借助maven升级到jar的方式,抽象性更加强了,假如iar再升级到到war或者多个集合jar,就成微服务了,在多模块jar模式下可以将某个jar拿出来对外共用,能大大提高代码复用率与开发效率。同时也能方便项目中所依赖的第三方Jar包的版本的统一管理。

1.2、开发环境

        本文将采用Java语言,基于JDK17基础环境、Maven、Idea等工具进行开发实现。JDK环境的安装请参考JDK安装部署。具体如下:

环境名称版本号
JDK17.0.7
Maven3.6.3
Idea2019.3.5
Spring Boot3.2.4

1.3、项目多模块结构

        本文通过构建一个包含5个子模块的项目,来演示 SpringBoot 在 Maven 环境的多模块构建过程。具体如下图所示:
图片1

  • Common模块:该模块主要是通用工具类、错误码、公共数据对象管理等;
  • API模块:主要是外部依赖服务管理;
  • Web模块:负责接收Http/RPC请求、路由到指定Controller;
  • Service模块:负责业务逻辑处理;
  • DAO模块:负责数据访问;

1.4、新建父工程

        通过Spring Lnitalizer创建父工程,并设置响应的参数即可,具体操作步骤如下。
        (1)File ->New Project ,在参数页面设置JDK版本,然后点击下一步即可,具体如下:
图片2
        (2)在项目元数据参数页面根据实际需要设置对应的参数即可,具体如下:
图片3
        (3)在项目依赖参数页面根据实际需要设置对应的参数即可,具体如下:
图片4
        (4)在项目位置参数页面根据实际需要设置对应的参数即可,具体如下:
图片5
        (5)创建好后删除刚创建工程里不需要的文件, 只保留:.idea 文件夹 、项目 pom 文件、以及一个 *.iml 文件,删除前的项目结构如下:
图片6
        删除后的项目结构如下:
图片7

1.5、创建子模块

        (1)右键点击父工程,选择 New -> Module… 创建子模块。这里依次创建 common、api、dao、service 和 web 共 5 个模块。

注意:除了 web 子模块创建时选择添加 Spring Web 依赖(当然也可以创建时不添加,等后面再手动编辑 pom.xml 文件添加),其他模块暂时不添加依赖。

        在新建模块参数页面根据实际情况设置参数即可,具体如下:
图片8
图片9
图片10
        (2)重复上述步骤新建common、api、service 等其他模块。
        (3)将所有子模块的 mvnw、mvnw.cmd 文件及 .mvn 文件夹全部删除,具体如下:
图片11
        (4)参照新建父工程的方式新建web模块。
        (5)对于 src 里的内容,只保留 web 的启动类和配置文件,其他子模块的的启动类和配置文件都删除。

1.6、编辑父工程的pom.xml文件

        将父工程 pom.xml 文件修改成如下内容,里面声明该父工程包含的子模块,同时抽取统一的配置信息和依赖版本控制,这样可以方便子 pom 直接引用,简化子 pom 的配置。

1、多模块项目中,父模块打包类型必须是 pom。
2、因为开发框架是 spring boot,父模块默认继承 spring-boot-starter-parent,因此可以删除 spring-boot-starter 和 spring-boot-starter-test 依赖(祖先已经包含了)

        父工程pom.xml如下:

<?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><packaging>pom</packaging><modules><module>common</module><module>api</module><module>dao</module><module>service</module><module>web</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.cerc.smart</groupId><artifactId>design</artifactId><version>0.0.1-SNAPSHOT</version><name>design</name><description>SpringBoot多模块应用</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/593935.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥-时间显示

目录 题目链接 代码 题目链接 1.时间显示 - 蓝桥云课 (lanqiao.cn) 代码 #include <bits/stdc.h> using namespace std;int main() {long long x;cin>>x;int h,m,s;x x / 1000 % (3600*24); // 毫秒化秒&#xff0c;并且保留最后一天的时间h x / 3600; //求得…

深入理解计算机系统 家庭作业 2.84

这题没有这个要求所以可以用 ? > : < 这种运算 以下代码用的是位级运算.因为我误解了题意 呜呜呜 想看用判断的代码请自行百度 ((((ux<<9>>9)<<((ux<<1>>24)-127)) - ((uy<<9>>9)<<((uy<<1>>24)-127)))>…

如何利用FLUENT计算流体力学方法解决大气与环境领域流动问题

ANSYS FLUENT是目前全球领先的商用CFD 软件&#xff0c;市场占有率达70%左右&#xff0c;是工程师和研究者不可多得的有力工具。由于采用了多种求解方法和多重网格加速收敛技术&#xff0c;因而FLUENT能达到最佳的收敛速度和求解精度。灵活的非结构化网格和基于解的自适应网格技…

学习网安(21)

第20章存在疑问&#xff0c;待开学后和老师求证改动后发布 中间件之一——apache 先说一下http协议——超文本传输协议 全称为&#xff1a;Hyper Text Transfor Protocol 用途&#xff1a;让用户通过浏览器发送请求到服务器端&#xff0c;接收客户端返回的数据&#xff0c;…

SRS 实时视频服务器搭建及使用

一、SRS 介绍 SRS是一个开源的&#xff08;MIT协议&#xff09;简单高效的实时视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用&#xff0c;提供流的接收和分发的能力&am…

独角数卡对接支付卡跳转问题解决方法

问题描述 最近在用独角数卡搭建了一个测试版的商店程序&#xff0c;结果却在对接易支付的过程中出现了卡跳转的问题&#xff0c;支付能正常完成&#xff0c;订单发卡也正常&#xff0c;就是会卡在这个弹窗页面无法正常跳转至订单查看页面。 本来这种BUG无关痛痒&#xff0c;但…

C++之函数提高(HM)

目录 1.函数默认参数&#xff08;缺省参数&#xff09; 2.占位参数 3.函数重载 4.类和对象--封装 &#xff08;1&#xff09;圆类&#xff1a; &#xff08;2&#xff09;访问权限 &#xff08;3&#xff09;struct&&class &#xff08;4&#xff09;立方体类的…

LeetCode 494. 目标和

解题思路 相关代码 class Solution {public int findTargetSumWays(int[] nums, int target) {int f[][] new int[30][2010];int offset 1000;//因为target>-1000&&target<1000,所以需要一个偏移量//f[0][0] -> f[0][0offset]1;f[0][0offset] 1;//由于存在…

Linux课程____LVM(逻辑卷管理器)

LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层&#xff0c;它提供了一个抽象的卷组&#xff0c;可以把多块硬盘进行卷组合并。 这样一来&#xff0c;用户不必关心物理硬盘设备的底层架构和布局&#xff0c;就可以实现对硬盘分区的动态调整。 动态调整磁盘容量&#xff…

Vue3【进阶】

简介 https://cn.vuejs.org/guide/introduction.html 创建vue3工程 【基于 vue-cli创建】 基本和vue-cli的过程类似&#xff0c;只是选择的时候用vue3创建 【基于vite创建】【推荐】 【官网】https://vitejs.cn/ 【可以先去学一下webpack】 步骤 【https://cn.vitejs.…

OCDS(on chip debug support)之STM

1. 问题&#xff1a; 在使用劳得巴赫调试TC397过程中&#xff0c;发现劳得巴赫break后&#xff0c;再次运行&#xff0c;task中的计数器不再增加&#xff0c;OS不再调度&#xff0c;并且会进入ERROR hook&#xff0c;error类型为OS_LIMITED 2. 排查 2.1 ErrorHook中的Error4&…

Docker Desktop 不支持 host 网络模式

先把这个结论的放在前面&#xff0c;直接访问链接就能看到官方文档中已经明确说了不支持。 参考链接&#xff1a;docker desktop for windows 不支持 host 网络模式 以前对于 docker 的网络模式&#xff0c;一直只是了解&#xff0c;没有亲自尝试过。结果今天在尝试 docker 的 …