• 一、创建聚合父工程
  • 二、创建子模块(module)
  • 三、编写子模块代码
  • 三、运行项目
  • 四、运维部署(多模块打包)
    • 1. 添加打包插件
    • 2. 打包工程
    • 3. 启动项目

  • 《Java 2019 超神之路》
  • 《Dubbo 实现原理与源码解析 —— 精品合集》
  • 《Spring 实现原理与源码解析 —— 精品合集》
  • 《MyBatis 实现原理与源码解析 —— 精品合集》
  • 《Spring MVC 实现原理与源码解析 —— 精品合集》
  • 《Spring Boot 实现原理与源码解析 —— 精品合集》
  • 《数据库实体设计合集》
  • 《Java 面试题 —— 精品合集》
  • 《Java 学习指南 —— 精品合集》

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

一、创建聚合父工程

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

聚合父工程

  1. 然后在 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 {@AutowiredUserService 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=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver

  • 2. 业务层(mm-service)

结构图

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

@Service
public class UserServiceImpl  implements UserService {@AutowiredUserRepository userRepository;@Overridepublic 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对象

package com.hehe.integration.common;import java.io.Serializable;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 = ""; //描述信息//APISpublic 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;}//Constructorspublic 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,插入数据如图:

sock.t_user.PNG

  1. 配置好整个项目之后,这里只需要运行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. 启动项目

通过命令行启动项目:

xxmm-webtarget>java -jar mm-web-0.0.1-SNAPSHOT.jar

启动效果如下:

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

  1. dev项目属性按钮是灰色_Spring Boot 中的项目属性配置

    阅读本文约需要5分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了Spring Boot 如何使用 SLF4J 进行日志记 ...

  2. springboot学习_Spring Boot 开源学习项目代码日爆爆爆

    最新要学习 Spring Boot ,以前也用过部分的框架爱,最近试用之后便一发不可收拾的爱上它.使用 Spring Boot 来开发项目则只需要非常少的几个配置就可以搭建起来一个 Web 项目,并且 ...

  3. springbboot加密打包_Spring Boot 配置 Security 密码加密

    依赖 org.springframework.boot spring-boot-starter-security 注入bean @SpringBootApplication public class ...

  4. java项目启动后运行方法_spring boot在启动项目之后执行的实现方法

    前言 我们在web项目启动之后有时候还会做点其它的东西(比如,导入数据脚本),下面就说说spring-boot里怎么在程序启动后加入自己要执行的东西 方法如下: 新建一个类:BeforeStartup ...

  5. python的py文件打包成exe_将python项目.py文件打包成.exe文件

    安装pyinstaller包 pip3 install pyinstaller 如果不行 pip3 install pyinstaller -i https://pypi.doubanio.com/s ...

  6. spring boot 核心_Spring Boot 的 10 个核心模块

    作者:Java技术栈 链接:https://www.jianshu.com/p/11c54edc2d11 学习 Spring Boot 必须得了解它的核心模块,和 Spring 框架一样,Spring ...

  7. Spring Boot多模块项目打包

    Spring Boot多模块项目打包 例如父项目 build_test 下面有三个子模块,一个是common模块 一个是a模块,一个b模块:其中common是公共模块,a和b都依赖于公共模块commo ...

  8. 打包tomcat没有xml文件_Spring Boot 项目打包 War 并部署到 Tomcat

    之前使用 SpringBoot 所做的开发,都是将项目打包成 Jar 的,但是如果是作为一个 Web 项目,最好是将项目打包成 War. 1. Jar 包和 War 包的区别 1.概念 jar 包:J ...

  9. Maven 搭建spring boot多模块项目(附源码)

    Maven 搭建spring boot多模块项目 备注:所有项目都在idea中创建 1.idea创建maven项目 1-1: 删除src,target目录,只保留pom.xml 1-2: 根目录pom ...

最新文章

  1. 学习ui设计的流程是什么
  2. html下拉列表框设置两个,怎么使用HTML option标签添加两个value
  3. 【Python】时间处理:日期减少n年(考虑闰年)
  4. 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
  5. hdu 1806 Frequent values 线段树
  6. OSChina 周一乱弹 ——节后突然不想上班的节奏
  7. GraphX:基于Spark的弹性分布式图计算系统
  8. apscheduler
  9. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求
  10. 数据仓库项目管理面试题整理(十二)
  11. html上传文件出现fakepath,chrome upload file 出现 fakepath,请解决方案
  12. Python练习题(三)
  13. 深思考AI机器人-巧思首登央视  “以一当十”接受宫颈癌病理专家检验
  14. python开发要学什么_运维为什么要学编程?编程为什么是Python?
  15. WPS vbe6ex.olb 不能加载
  16. H2教程系列(二) 创建数据库
  17. 亚马逊中东站好做吗?这或许是迄今为止最好的回答!
  18. STK。如何规定“视线”的范围
  19. 看穿 137 亿光年,中国天眼会帮我们找到「三体星」吗?|创新大会 2021
  20. SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- Marvell8801/Marvell88w8801命令/事件/数据格式

热门文章

  1. C/C++之预处理命令
  2. 算法练习day6——190323(求中位数、堆排序、稳定性)
  3. stm32之iap实现应用(基于串口,上位机,详细源码)
  4. UML 类图几种关系的总结
  5. mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...
  6. Openwrt按键检测分析-窥探Linux内核与用户空间通讯机制netlink使用
  7. eclipse php uml,Eclipse UML插件Amateras UML及GEF安装与用法
  8. 虚拟机拷贝出来_NETAPP存储虚拟机数据恢复案例
  9. POJ--2104 K-th Number (主席树模版题)
  10. python学习点滴记录-Day09