springboot 多模块项目

news2024/9/25 23:12:31

比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。

新建父模块的pom.xml

创建聚合父工程
首先使用 Spring Initializr 来快速创建好一个Maven工程。然后删除无关的文件,只需保留pom.xml 文件。

  • new Project -> spring initializr快速构建SpringBoot,artifactId为springbootmodules
  • 因为父模块只是为了组织子模块用,删除src等没用的文件,删除pom.xml中maven依赖等信息。
  • 父模块打包类型packaging从jar调整为pom
  • 添加两个module:provider和consumer

 <modules>
        <module>provider</module>
        <module>consumer</module>
    </modules>

新建子模块:

  • 1.对着父工程右键 - New - Module - > 输入 provider
  • 2.对着父工程右键 - New - Module - > 输入 consumer
  • 完成后,分别调整它们的pom.xml 以继承上面的父工程。

new Module - > spring initializr,分别新增artifactId为provider和consumer,放在springbootmodules目录之下: 

调整pom.xml

父pom.xml现在只有管理两个子模块的作用,可以抽取子模块统一的配置信息和依赖版本控制放父模块中管理。

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

<!-- 基本信息 -->
    <groupId>com.xd</groupId>
    <artifactId>springbootmodules</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>


 <!-- 继承说明:这里继承SpringBoot提供的父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


<!-- 模块说明:这里声明多个子模块 -->
    <modules>
        <module>provider</module>
        <module>consumer</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    

 <!-- 版本说明:这里统一管理依赖的版本号 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-web</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-repo</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.hehe</groupId>
                <artifactId>mm-entity</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    
</project>

新版idea创建后

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

老版本idea

 <!-- 继承说明:这里继承SpringBoot提供的父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

子模块pom.xml,设置parent为springbootmodules:

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

    <groupId>com.xd</groupId>
    <artifactId>provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>provider</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <!--<groupId>org.springframework.boot</groupId>-->
        <!--<artifactId>spring-boot-starter-parent</artifactId>-->
        <!--<version>2.1.1.RELEASE</version>-->
        <!--<relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
        <groupId>com.xd</groupId>
        <artifactId>springbootmodules</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </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-web</artifactId>-->
        <!--</dependency>-->

        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-test</artifactId>-->
            <!--<scope>test</scope>-->
        <!--</dependency>-->
    <!--</dependencies>-->

    <build>
        <plugins>
<!--该插件主要用途:构建可执行的JAR -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

其他模块都继承父模块,这里需要注意:由于我们把其他模块的启动类删了,父模块的spring-boot-maven-plugin插件也需要删掉,然后添加到需要的模块中去,因为springboot这个插件必须要启动类,否则则会出现错误:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端知识】Cookie, Session,Token和JWT的发展及区别(三)

【前端知识】Cookie, Session,Token和JWT的发展及区别&#xff08;三&#xff09; 7. Token7.1 Token的背景及定义7.1.1 背景7.1.2 定义7.1.3 基于定义的N个思考&#xff08;1&#xff09;关于无状态的相关思考&#xff08;2&#xff09; 避免查库的思考 7.2 Token的特点&#…

记一次perf实验,检验CPU的分支预测功能

实验介绍 在上一篇文章中&#xff0c;作者通过给Alder Lake&#xff08;12th gen i5 1240p&#xff09;安装Ubuntu22.04&#xff0c;终于把PMU用起来了 $ dmesg | grep PMU [ 0.127326] Performance Events: XSAVE Architectural LBR, PEBS fmt4-baseline, AnyThread dep…

明文传输的FTP 是否已慢慢被时代所抛弃?

什么是FTP&#xff1f;FTP即File Transfer Protocol&#xff0c;含FTPS/SFTP&#xff0c;诞生于1971年&#xff0c;是最为古老的网络协议和工具之一&#xff0c;是一种在网络进行文件传输的标准应用层协议&#xff0c;也泛指基于FTP协议实现文件传输的服务端软件和客户端软件&a…

《双向队列》

介绍 双向队列&#xff08;deque&#xff0c;全名double-ended queue&#xff09;是一种具有队列和栈性质的数据结构。 对于队列&#xff0c;我们只能在头部删除或在尾部添加元素&#xff0c; 而「双向队列 Deque」更加灵活&#xff0c;在其两端都能执行元素添加或删除操作。…

【笔记】【HTTP】《图解HTTP》第3章 HTTP报文内的HTTP信息

前言 有输入就要有产出&#xff0c;该笔记是本人看完《图解HTTP》后对每章涉及到的知识进行汇总博客将会已书的每章为一篇发布&#xff0c;下一篇博客发布时间不确定笔记中有些个人理解后整理的笔记&#xff0c;可能有所偏差&#xff0c;也恳请读者帮忙指出&#xff0c;谢谢。…

TCP网络编程-python

OSI七层模型和TCP/IP四层模型 通信时需要用到网络模型来进行数据封装。一层一层封装和拆包。 OSI 模型把网络通信的工作分为 7 层&#xff0c;从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 分层太多&#xff0c;增加了网络工作的复杂性。 简…

锐捷网络,无边光景一时新

绍熙五年&#xff0c;朱熹在除知潭州、荆湖南路安抚&#xff0c;在长沙岳麓山扩建了闻名天下的岳麓书院。他写过这样一句赞美春日的诗&#xff1a;胜日寻芳泗水滨&#xff0c;无边光景一时新。 近一千年后&#xff0c;我们依旧能在长沙感受到“无边光景一时新”魄力雄浑。这次&…

Python自动化测试实战篇(8),pytest 测试用例初始化的五种方法与清洗方法

这些是之前的文章&#xff0c;里面有一些基础的知识点在前面由于前面已经有写过&#xff0c;所以这一篇就不再详细对之前的内容进行描述 1.什么是是自动化测试环境初始化与清除2.自动化测试环境初始化与清除有哪些步骤&#xff1f;3.pytest中如何进行用例初始化与清洗方法1.类…

【JMeter】前端使用JMeter测试JSEncrypt加密登录

前端使用JMeter测试JSEncrypt加密登录 简介&#xff1a;前端开发时会接触到用户登录&#xff0c;登录时为了数据的安全会使用到jsencrypt加密工具&#xff0c;同时我们需要使用jmeter来进行压测&#xff0c;帮助我们了解Web应用程序在高负载情况下的性能表现&#xff0c;从而为…

工业物联网是什么?工业物联网发展前景如何?

工业物联网 (IIoT) 是在工业环境中使用互连的智能设备、传感器和软件来提高运营效率、生产力和安全性。IIoT 系统通常涉及机器、设备和传感器&#xff0c;这些机器、设备和传感器嵌入了相互通信以及与中央系统通信的技术。这允许对工业过程进行实时监控和分析&#xff0c;并能够…

jenkins配置springcloudalibaba流水线加服务器自动构建

参数化构建过程 Extended Choice Parameter Name&#xff1a;project_name Description&#xff1a;请选择需要构建的项目名称 Basic Parameter Types Parameter Type: Hidden Number of Visible Items: 20 Delimiter: , Choose Source for Value value: deerchain-gateway-95…

Linux权限划分的原则

考察的不仅是一个具体的指令&#xff0c;还考察对技术层面的认知。 如果对 Linux 权限有较深的认知和理解&#xff0c;那么完全可以通过查资料去完成具体指令的执行。更重要的是&#xff0c;认知清晰的程序员可以把 Linux 权限管理的知识迁移到其他的系统设计中。 权限抽象 一…

MyBatisPlus学习笔记(SpringBoot版)

MyBatisPlus学习笔记&#xff08;SpringBoot版&#xff09; 一、MyBatis-Plus简介1、简介2、特性3、支持数据库4、框架结构5、代码及文档地址 二、入门案例1、开发环境2、创建数据库及表2.1 创建表2.2 添加数据 3、创建Spring Boot工程3.1 初始化工程3.2 引入依赖3.3 idea中安装…

【MySQL】绪论 MySQL工作环境

文章目录 实验内容实验步骤实验内容 MySQL命令MySQL 的启动与关闭MySQL 管理备份和还原数据库navicat工具使用实验步骤 1. MySQL命令 (1)查看MySQL基本命令 (2)查看MySQL版本信息 2. MySQL的启动与关闭 (1)启动MySQL服务器 (2)测试服务器启动成功 (3)合法用

MATLAB绘图函数的相关介绍——海底测量、二维与三维图形绘制

系列文章目录 MATLAB求函数极限的简单介绍 文章目录 一、问题引导 1.1、海底曲线绘制问题 1.2、绘制二维与三维图形 二、代码演示 2.2、二维与三维绘图案例 2.2.1、官方对plot函数的解释 总结 一、问题引导 1.1、海底曲线绘制问题 海底测量&#xff0c;低潮时海平面上…

案例研究|萤石网络通过JumpServer解决安全运维难题

杭州萤石网络股份有限公司&#xff08;以下简称为萤石网络&#xff09;于2015年在杭州成立&#xff0c;是安全智能生活主流品牌&#xff0c;核心产品包括智能家居摄像头、智能门锁、智能服务机器人等。2021年&#xff0c;萤石网络家用摄像头占国内出货量市场份额的25%&#xff…

代码随想录算法训练营day32 | 贪心算法:122.买卖股票的最佳时机II ,55. 跳跃游戏,45.跳跃游戏II

代码随想录算法训练营day32 | 贪心算法&#xff1a;122.买卖股票的最佳时机II &#xff0c;55. 跳跃游戏&#xff0c;45.跳跃游戏II 122.买卖股票的最佳时机II55. 跳跃游戏45.跳跃游戏II 122.买卖股票的最佳时机II 教程视频&#xff1a;https://www.bilibili.com/video/BV1ev4…

Java基础(33)Java集合详解

集合类主要负责保存、盛装其他数据&#xff0c;因此集合类也被称为容器类。Java 所有的集合类都位于 java.util 包下&#xff0c;提供了一个表示和操作对象集合的统一构架&#xff0c;包含大量集合接口&#xff0c;以及这些接口的实现类和操作它们的算法。 集合类和数组不一样&…

2023年湖北安全员ABC证报考条件都有哪些?有什么区别?启程别

2023年湖北安全员ABC证报考条件都有哪些&#xff1f;有什么区别&#xff1f;启程别 一、安全员ABC证是什么&#xff1f; 安全员A、B、C证属于建筑三类人员证书。建筑三类人员&#xff1a;是指建筑施工企业主要负责人、项目负责人和专职安全生产管理人员。 建筑企业的法人代表&…

【Linux下】 线程操作及线程互斥

【Linux下】 线程操作及线程互斥 线程操作 注&#xff1a;以下函数使用时&#xff0c;编译文件时需带上-lpthread选项&#xff0c;因为下面的函数都是线程库里面的函数 pthread_self #include <pthread.h> pthread_t pthread_self(void);**作用&#xff1a;**获取当前…