Spring Boot 多模块项目实践(附打包方法)

一个springboot 项目a集成另一个springboot 项目b 阅读详情

作者 | yizhiwazi

链接 | www.jianshu.com/p/59ceea4f029d

序言:

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

接下来,本文将重点阐述SpringBoot在Maven环境的多模块构建过程。

本项目传送门:

https://github.com/yizhiwazi/springboot-socks/tree/master/springboot-integration

一、创建聚合父工程

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

2.然后在 pom.xml 里面声明该父工程包含的子模块。(其它信息就不逐一讲述了,诸如继承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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <!-- 基本信息 -->
    <description>SpringBoot 多模块构建示例</description>
    <modelVersion>4.0.0</modelVersion>
    <name>springboot-integration</name>
    <packaging>pom</packaging>

    <!-- 项目说明:这里作为聚合工程的父工程 -->
    <groupId>com.hehe</groupId>
    <artifactId>springboot-integration</artifactId>
    <version>1.0.0.RELEASE</version>

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

    <!-- 模块说明:这里声明多个子模块 -->
    <modules>
        <module>mm-web</module>
        <module>mm-service</module>
        <module>mm-repo</module>
        <module>mm-entity</module>
    </modules>

    <!-- 版本说明:这里统一管理依赖的版本号 -->
    <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>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.42</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

二、创建子模块(module)

注:这里是使用IDEA来创建子模块,使用Eclipse的小伙伴可通过 Spring Initializr 构建,然后复制去进去父工程根目录即可。

  1. 对着父工程右键 - New - Module - > 输入 mm-web

  2. 对着父工程右键 - New - Module - > 输入 mm-service

  3. 对着父工程右键 - New - Module - > 输入 mm-repo

  4. 对着父工程右键 - New - Module - > 输入 mm-entity

1~4 步骤完成后,分别调整它们的pom.xml 以继承上面的父工程。

例如mm-web模块的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 基本信息 -->
    <groupId>com.hehe</groupId>
    <artifactId>mm-web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>mm-web</name>

    <!-- 继承本项目的父工程 -->
    <parent>
        <groupId>com.hehe</groupId>
        <artifactId>springboot-integration</artifactId>
        <version>1.0.0.RELEASE</version>
    </parent>

    <!-- Web模块相关依赖 -->
    <dependencies>
        <dependency>
            <groupId>com.hehe</groupId>
            <artifactId>mm-service</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hehe</groupId>
            <artifactId>mm-entity</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

三、编写子模块代码

1.控制层(mm-web)

启动类 :MmWebApplication.java (mm-web)

@SpringBootApplication
public class MmWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(MmWebApplication.class, args);
    }
}

控制器:UserController.java (mm-web )

@RestController
@RequestMapping("/user/*")
public class UserController {

    @Autowired
    UserService userService;

    @GetMapping("list")
    public R list() {
        try {
           return R.isOk().data(userService.list());
        } catch (Exception e) {
            return R.isFail(e);
        }

    }

}

配置文件:application.yml (mm-web)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/socks?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

2.业务层(mm-service)

实现类:UserServiceImpl.java (mm-service)

@Service
public class UserServiceImpl  implements UserService {

    @Autowired
    UserRepository userRepository;

    @Override
    public List<User> list() {
        return userRepository.findAll();
    }
}

3.数据层(mm-repo)

数据层代码:UserRepository.java (mm-repo)

public interface UserRepository extends JpaRepository<User,String> {
}

4.mm-entity (实体模型层)

R.java 作为统一返回的Bean对象

public class R<T> implements Serializable {

    private static final long serialVersionUID = -4577255781088498763L;
    private static final int OK = 0;
    private static final int FAIL = 1;
    private static final int UNAUTHORIZED = 2;

    private T data; //服务端数据
    private int status = OK; //状态码
    private String msg = ""; //描述信息

    //APIS
    public static R isOk(){
        return new R();
    }
    public static R isFail(){
        return new R().status(FAIL);
    }
    public static R isFail(Throwable e){
        return isFail().msg(e);
    }
    public R msg(Throwable e){
        this.setMsg(e.toString());
        return this;
    }
    public R data(T data){
        this.setData(data);
        return this;
    }
    public R status(int status){
       this.setStatus(status);
       return this;
    }


    //Constructors
    public R() {

    }

    //Getter&Setters

}
@Entity
@Table(name = "T_USER")
public class User {

    @Id
    @Column(name = "USERID")
    private String userId;
    @Column(name = "USERNAME")
    private String username;
    @Column(name = "PASSWORD")
    private String password;

    //Getter&Setters
}

三、运行项目

为了更好的学习效果,建议先下载本项目,在IDE运行成功之后,然后再由自己手工敲一遍。

具体步骤:

1.首先下载好 springboot-socks,然后打开springboot-integration 工程。

2.安装Mysql数据库,然后创建数据库socks,并添加表t_user,插入数据如图:

3.配置好整个项目之后,这里只需要运行mm-web模块下的MmWebApplication的启动类就可以了,如正常启动后,访问http://localhost:8080 可查询到用户列表信息。如下图:

四、运维部署(多模块打包)

1.添加打包插件

注意:多模块项目仅仅需要在启动类所在的模块添加打包插件即可!!不要在父类添加打包插件,因为那样会导致全部子模块都使用spring-boot-maven-plugin的方式来打包(例如BOOT-INF/com/hehe/xx),而mm-web模块引入mm-xx 的jar 需要的是裸露的类文件,即目录格式为(/com/hehe/xx)。

本案例的启动模块是 mm-web , 只需在它的pom.xml 添加打包插件(spring-boot-maven-plugin):

<!--多模块打包:只需在启动类所在模块的POM文件:指定打包插件 -->
    <build>
        <plugins>
            <plugin>
                <!--该插件主要用途:构建可执行的JAR -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2.打包工程

首先在IDE打开Maven插件,然后在聚合父工程spring-boot-integration中点击 clean ,然后点击 package 进行打包。如图:

打包效果如下:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] spring-boot-integration ............................ SUCCESS [ 0.000 s]
[INFO] mm-entity .......................................... SUCCESS [ 1.915 s]
[INFO] mm-repo ............................................ SUCCESS [ 0.235 s]
[INFO] mm-service ......................................... SUCCESS [ 0.218 s]
[INFO] mm-web ............................................. SUCCESS [ 0.891 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.798 s
[INFO] Finished at: 2017-10-18T17:17:02+08:00
[INFO] Final Memory: 35M/300M
[INFO] ------------------------------------------------------------------------

打包地址默认在Target目录:

3.启动项目

通过命令行启动项目:

xx\mm-web\target>java -jar mm-web-0.0.1-SNAPSHOT.jar

启动效果如下:

 


(完)

(java思维导图)

长按关注,每天java一下,成就架构师

我就知道你在看!

Gradle构建多模块spring boot项目 按创建springboot项目的创建方式创建就行,创建完的结构。然后删除src目录。 阅读详情

相关推荐

Spring Boot单项目多模块多启动类【至简版】

道生一,一生二,二生三,三生万物;大道至简,道法自然。 码进零,零进一,一进二,二进万网;大码至简,万物归一。 《无码即为码》 项目架构 IDE结构 项目创建流程:https://blog.csdn.net/baidu_41885330/article/details/81875395 各模块打包出现错误:https://blog.csdn.net/lizhon...

首席码农 9822

springboot—01初使用

springboot的简单使用

weixin_48112109的博客 416

Spring Boot多模块打包与Maven实战指南

本章详细讲解了父模块在Spring Boot多模块项目中的作用、创建流程、依赖管理机制、模块间依赖配置以及常见问题的解决方案。通过合理配置父模块,可以有效提升项目的可维护性、构建效率和团队协作能力。下一章我们将深入探讨核心模块的设计与实现,包括核心业务逻辑的封装、领域模型的设计、模块测试与发布等内容,进一步夯实多模块项目的开发基础。抽象类和接口是核心模块中非常重要的设计元素。它们可以定义通用的行为规范,供子类或实现类继承或实现。逻辑说明。

weixin_34163588的博客 885

SpringBoot整合其它项目

如果重新创建项目,在选择组件时,在非关系数据库是可以看见Redis的组件的,在这博主就不重新创建项目了,而是通过手动引入组件的方法。在这之后,如果是使用虚拟机的小伙伴,那么就需要启动虚拟机,然后打开redis的服务。不要最新的,进过测试SQL监控失效(如果是最新的可能还需要添加其他依赖)如果ttl名不是text,那么时间就是默认的600s,测试一下。在去redis中可以发现有数据了,但是是我们看不懂的数据。将redistemplate交给spring管理。Controller定义方法。

qq_63531917的博客 1360

springboot项目整合

springboot整合项目:mybatis、事务、自定义配置文件等。。。

MiniOSD DIY记

最近迷上了航模,研究了很多东西,感觉路走的长了还是适当要停下脚步休息下总结下。 这次DIY的是一块OSD设备,主要用于航模图传的叠加显示,原理也很简单就是atmel atmega328p+MAX7456芯片,网上卖的成品基本上都是一个原理图。 原理图 我按照我自己的需要做了适当的更改,去掉了DC-DC电路,直接用5V输入,因为摄像头都是5V的,所以DC-DC不是很有必要,体积上更加小了点, 打...

memoff的博客 8537

SpringBoot 多模块项目实践(附打包方法)

点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!作者:yizhiwaziwww.jianshu.com/p/59ceea4f029d序言:比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。接下来,本文将重点阐述SpringBoot在Mav...

Java笔记虾 4974

别再搞混了!MATLAB通信仿真中EbN0转SNR的保姆级公式推导与避坑指南

本文深入解析MATLAB通信仿真中EbN0与SNR转换的核心公式,揭示数字仿真与理论系统的关键差异。通过真实案例展示错误参数设置导致的隐蔽问题,并提供完整的参数自查清单和正确实现代码,帮助工程师和学生避免常见错误,确保仿真结果准确可靠。

weixin_28746223的博客 348

maven多模块合并打包_Spring Boot 多模块项目实践(附打包方法)

一、创建聚合父工程二、创建子模块(module)三、编写子模块代码三、运行项目四、运维部署(多模块打包)1. 添加打包插件2. 打包工程3. 启动项目《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《...

weixin_39546312的博客 2059

华为铁三角(AR、SR、FR)的考核指标设计

以和为核心,通过和实现协同。考核维度分为和,并随市场阶段动态调整权重。

从技术实践立足,从项目管理方法论延伸思考 2780

h5支付不能打开支付宝 ios_iOS支付宝H5支付无法返回APP解决方案

本文前大段在讲楼主是如何解决这个问题的,以及中间遇到的麻烦。赶时间的同学可以直接看最后的 最终解决方案。在讨论之前,我们先看看官方文档上的一句话:注意:在iOS系统中,唤起支付宝App支付完成后,不会自动回到浏览器或商户APP。用户可手工切回到浏览器或商户APP;支付宝H5收银台会自动跳转回商户return_url指定的页面。what? 官方直接跟我们说GG了?楼主不甘心,还是想尝试一下。借鉴之前...

weixin_39864101的博客 856

layui前端项目打包方法_Spring Boot 多模块项目实践(附打包方法)

一、创建聚合父工程二、创建子模块(module)三、编写子模块代码三、运行项目四、运维部署(多模块打包)1. 添加打包插件2. 打包工程3. 启动项目《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《...

weixin_29415429的博客 1326

从零搭建风电场:手把手教你用WAsP+WindPRO完成风资源评估全流程

本文详细介绍了从零开始搭建风电场的全流程,重点讲解如何使用WAsP和WindPRO进行风资源评估和风场布局优化。内容包括软件配置、数据采集规范、风图谱建模实战、机组选型策略以及常见问题解决方案,帮助工程师掌握风电开发的核心技术,提升项目成功率。

year5的博客 373

【Springboot-maven】Spring Boot 多模块项目实践(附打包方法)

原文地址:Spring Boot 多模块项目实践(附打包方法) 序言: 比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。 接下来,本文将重点阐述SpringBoot在Maven环境的多模块构建过程。 本项目传送门: https://githu...

Japathy 1万+

用InVEST做碳中和规划?手把手教你计算城市碳储量与热岛效应

本文详细介绍了如何利用InVEST模型进行城市碳中和规划的科学评估。通过手把手教学,演示了如何使用该模型的碳存储与城市热岛缓解模块,从数据准备、模型运行到结果解读,量化评估不同规划方案下的碳储量变化与热岛效应缓解潜力,为城市规划者提供科学的决策依据。

weixin_29201313的博客 823

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 813

Spring Boot 多模块项目实践(附打包方法) 侵删

序言: 比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。 接下来,本文将重点阐述SpringBoot在Maven环境的多模块构建过程。 本项目传送门: https://github.com/yizhiwazi/springboot-socks/tree/master/springboot-integration 一、创建聚合父工程 1.首先使用 S

心神沫沫的收藏 170

机器学习(十九):梯度提升回归(GBR)

机器学习中的梯度提升回归算法原理与案例实战。

全栈川川 5157

Spring Boot 多模块项目

Spring Boot 多模块项目是一种将大型项目拆分成多个小型、独立且相互协作的模块的开发方式。这种架构可以提高代码的可维护性、可扩展性和团队协作效率。下面从创建、结构、模块间依赖、配置管理以及打包部署等方面详细介绍 Spring Boot 多模块项目。多模块项目的核心优势包括:可以通过 Spring Initializr(https://start.spring.io/ )创建一个父项目。在创建时选择 Maven 或 Gradle 作为构建工具,选择合适的 Spring Boot 版本,添加必要的依赖。

qq_33529823的博客 2496

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring Boot项目中怎么构建多模块的应用

通过本文的介绍,我们了解了如何在Spring Boot项目中构建多模块应用,并且通过实际的示例展示了如何配置和使用多模块结构。在实际开发中,根据项目的需求,合理设计模块结构,不仅可以提高开发效率,还能有效地管理项目的复杂性。使用子模块BOM来管理多模块项目的依赖和插件版本,是一种高效且可维护的方案。通过这种方式,可以将所有版本信息集中在一个地方,使得整个项目的依赖和插件管理变得更加简洁和一致。在复杂项目中,这种方法能够有效地减少版本冲突和管理成本。

冥胖胖9的博客 1811

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 一个女生不主动联系你还有机会吗?
下一篇: 调整姿势!登顶 MacBook高效工作环境配置!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值