1.什么是聚合工程

如下图所示,拥有父子包结构的springboot工程叫做聚合工程。其中父包包括了多个子包(多个项目)。

2.聚合工程优势

  1. 组件化管理通用功能,动态的添加功能。
  2. 统一管理jar包的版本号
  3. 提高复用性

3.创建聚合工程

  1. 首先创建一个springboot项目,然后删除src文件夹 。
  2. 创建子工程

    选择spring boot项目,然后继续,创建项目。如果是工具,配置,组件化的项目(不需要启动)可以继续删除启动类和resources文件夹。
  3. 修改父工程和子工程pom文件。然后聚合工程就搭建好了,这里最重点是pom文件的配置和标签,下文就开始介绍。

4.父工程详解

ps:这里以若依开源项目为例,结构如下,我们主要讲解红框里面的配置,父工程为RuoYi-Cloud,包括ruoyi-auth,ruoyi-gateway,ruoyi-visual,ruoyi-api,ruoyi-common子项目。而ruoyi-modules子工程也包括多个子工程。
#

1.pom文件

<?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.ruoyi</groupId><artifactId>ruoyi</artifactId><version>2.5.0</version><name>ruoyi</name><url>http://www.ruoyi.vip</url><description>若依微服务系统</description><properties><ruoyi.version>2.5.0</ruoyi.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-boot.version>2.3.7.RELEASE</spring-boot.version><spring-cloud.version>Hoxton.SR9</spring-cloud.version><spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version><spring-boot-admin.version>2.3.1</spring-boot-admin.version><spring-boot.mybatis>2.1.4</spring-boot.mybatis><swagger.fox.version>2.9.2</swagger.fox.version><swagger.core.version>1.5.24</swagger.core.version><tobato.version>1.26.5</tobato.version><kaptcha.version>2.3.2</kaptcha.version><pagehelper.boot.version>1.3.0</pagehelper.boot.version><druid.version>1.2.4</druid.version><dynamic-ds.version>3.2.1</dynamic-ds.version><commons.io.version>2.5</commons.io.version><commons.fileupload.version>1.3.3</commons.fileupload.version><velocity.version>1.7</velocity.version><fastjson.version>1.2.75</fastjson.version><minio.version>8.0.3</minio.version><poi.version>4.1.2</poi.version><common-pool.version>2.6.2</common-pool.version></properties><!-- 依赖声明 --><dependencyManagement><dependencies><!-- SpringCloud 微服务 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- SpringCloud Alibaba 微服务 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!-- SpringBoot 依赖配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--  SpringBoot 监控客户端 --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>${spring-boot-admin.version}</version></dependency><!-- FastDFS 分布式文件系统 --><dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>${tobato.version}</version></dependency><!-- Mybatis 依赖配置 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${spring-boot.mybatis}</version></dependency><!-- Swagger 依赖配置 --><dependency><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId><version>${swagger.core.version}</version></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>${swagger.core.version}</version></dependency><!-- 验证码 --><dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>${kaptcha.version}</version></dependency><!-- pagehelper 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.boot.version}</version></dependency><!-- io常用工具类 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons.io.version}</version></dependency><!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><!-- 文件上传工具类 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>${commons.fileupload.version}</version></dependency><!-- 代码生成使用模板 --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>${velocity.version}</version><exclusions><exclusion><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId></exclusion></exclusions></dependency><!-- JSON 解析器和生成器 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!-- 公共资源池 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>${common-pool.version}</version></dependency><!-- 核心模块 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-core</artifactId><version>${ruoyi.version}</version></dependency><!-- 接口模块 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-swagger</artifactId><version>${ruoyi.version}</version></dependency><!-- 安全模块 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-security</artifactId><version>${ruoyi.version}</version></dependency><!-- 权限范围 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-datascope</artifactId><version>${ruoyi.version}</version></dependency><!-- 多数据源 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-datasource</artifactId><version>${ruoyi.version}</version></dependency><!-- 日志记录 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-log</artifactId><version>${ruoyi.version}</version></dependency><!-- 缓存服务 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-redis</artifactId><version>${ruoyi.version}</version></dependency><!-- 系统接口 --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-api-system</artifactId><version>${ruoyi.version}</version></dependency></dependencies></dependencyManagement><modules><module>ruoyi-auth</module><module>ruoyi-gateway</module><module>ruoyi-visual</module><module>ruoyi-modules</module><module>ruoyi-api</module><module>ruoyi-common</module></modules><packaging>pom</packaging><dependencies><!-- swagger --><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>1.5.10</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins></build></project>
<name><url><description>都是非必须,字面意思。
<groupId>:域 例如com
<artifactId>:公司名  groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的
<version>:项目的版本号
<properties>:属性的占位符 如java中的常量 <dependencyManagement>:在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。<dependencies>:指定所有的子工程都下载该包。

白话说 如果父工程有,且groupId和artifactId相同,那么子工程不需要指定版本号, 直接使用父工程版本号。

例如:当子工程有groupId为org.springframework.cloud时,引用当前父工程指定版本。子工程不用在写版本号了。

<!-- SpringCloud 微服务 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency>
<modules>:指当前父工程包含的子工程 如果这里不引入 那么 刷新父工程pom时 子工程不会下载jar包
<build>:打包配置
<packaging>pom</packaging>在聚合工程中 一定要配置 指的是在引入其他工程时 直接引入代码,否则就会打成jar包 这样就会报错了

5.ruoyi-modules子工程配置

这里我们选择一个最有代表性的子工程ruoyi-modules来介绍。

1.pom文件

<?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"><parent><groupId>com.ruoyi</groupId><artifactId>ruoyi</artifactId><version>2.5.0</version></parent><modelVersion>4.0.0</modelVersion><modules><module>ruoyi-system</module><module>ruoyi-gen</module><module>ruoyi-job</module><module>ruoyi-file</module></modules><artifactId>ruoyi-modules</artifactId><packaging>pom</packaging><description>ruoyi-modules业务模块</description></project>

这里主要配置是

<parent>:内容就是父工程的<groupId><artifactId><version>
<modules>:指该工程包含ruoyi-system,ruoyi-gen,ruoyi-job,ruoyi-file子工程

2.ruoyi-system子项目配置

<?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"><parent><groupId>com.ruoyi</groupId><artifactId>ruoyi-modules</artifactId><version>2.5.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>ruoyi-modules-system</artifactId><description>ruoyi-modules-system系统模块</description><dependencies><!-- SpringCloud Alibaba Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- SpringCloud Alibaba Nacos Config --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringCloud Alibaba Sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!-- SpringBoot Actuator --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Swagger UI --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.fox.version}</version></dependency><!-- Mysql Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- RuoYi Common DataSource --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-datasource</artifactId></dependency><!-- RuoYi Common DataScope --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-datascope</artifactId></dependency><!-- RuoYi Common Log --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-log</artifactId></dependency><!-- RuoYi Common Swagger --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-swagger</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
<parent>:配置父工程ruoyi-modules的<groupId><artifactId><version>
<dependencies>:本项目的依赖

如果想引入其他工程,只需要加入:

        <!-- RuoYi Common DataScope --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-datascope</artifactId></dependency><!-- RuoYi Common Log --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-log</artifactId></dependency><!-- RuoYi Common Swagger --><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common-swagger</artifactId></dependency>

springboot聚合工程讲解与部署相关推荐

  1. DEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在

    DEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在 问题描述 springboot 项目打包(package)或安装到仓库(install)的时候报错:程序包com.fu ...

  2. Springboot父子工程搭建到部署

    文前知识 子项目可以继承父项目的依赖, 前提是需要使用parent标签指定父项目 子项目可以单独引入依赖, 依赖只对当前子项目有效 子项目中没有页面打包方式可以为jar, 有页面打包使用war 创建父 ...

  3. springboot聚合工程(多模块)install时找不到包的问题及解决方案

    https://www.jianshu.com/p/b8f90b5ae79a 转载自上述链接,做个记录

  4. springboot工程的热部署

    springboot工程的热部署 (1)第一步配置pom.xml (2)第二步更改IDEA设置 什么是热部署配置呢? 我们在开发中反复修改类.页面等资源,每次修改后都是需要重新启动才生效,这样每次启动 ...

  5. 构建springboot微服务聚合工程

    这里使用IDEA构建一个springcloud聚合工程demo ,服务注册与发现组件使用eureka,然后使用ribbon实现客户端负载均衡 在创建工程之前,我是先把eureka服务端给创建好了,参照 ...

  6. Spring Boot Maven聚合工程 打包部署教程

    Spring Boot 给聚合工程 打包部署,这里打jar包进行部署,首先等保证父子工程能正常运行,依赖都能加载,不会造成maven之间循环依赖等问题,如图 从上面的图来看,就会发生循环依赖的问题,这 ...

  7. 【多模块聚合工程】IDEA搭建SpringBoot多模块聚合工程详细步骤

    这篇文章主要是介绍一下,如何在IDEA开发工具下,搭建一个基于SpringBoot的多模块聚合工程项目. 多模块聚合工程:按照MVC的思想,将应用分成三层web.service.mapper/dao这 ...

  8. Springboot2 D3 SpringBoot开发实用篇 - 热部署 - 配置高级 - 测试

    SpringBoot开发实用篇 ​ 运维实用篇完结以后,开发实用篇采用日更新的形式发布给各位小伙伴,基本上是每天一集,目前已经发布完毕. ​ 开发实用篇中因为牵扯到SpringBoot整合各种各样的技 ...

  9. 将springboot项目和vue项目部署到windows 2016 server(服务器)

    将springboot项目和vue项目部署到服务器 1.服务器环境配置 1.1 服务器需要安装的环境 1.2 服务器需要配置的入站与进站规则 2.springboot项目的打包 2.1 springb ...

最新文章

  1. java 导出 jar lib_java使用IDEA引入外部jar和导出可执行jar文件的方法
  2. arm02gnu/linux,2.1. 支持的硬件 - Debian GNU/Linux 安装手册(PPC架构)
  3. composer php 使用方法,Composer的基本使用方法
  4. Git 初始化及仓库创建及操作
  5. boost::geometry::model::infinite_line用法的测试程序
  6. [转]Android笔记:ScrollView嵌套ViewPager的滚动冲突解决方法
  7. vue-router配置介绍和使用方法(三)
  8. NetCore EF Code Frist
  9. 网站暴库原理与方法剖析
  10. Chrome 复制网页不可复制的文字
  11. android粘贴,Android复制粘贴到剪贴板
  12. 即时聊天工具混战中国
  13. 深入探索Android卡顿优化(下)
  14. 【Scratch画图100例】图39-scratch实心圆 少儿编程 scratch编程画图案例教程 考级比赛画图集训案例
  15. 公众号怎么做意见反馈菜单_公众号菜单怎么添加意见反馈表
  16. 【终极!!!】cannot connect to X server, couldnt connect to display
  17. 生物信息学测序之常见测序方法DNA文库构建
  18. ansible register 之用法
  19. 读书笔记 | 西方国有经济的兴衰
  20. DaisyDisk Mac磁盘数据分析工具发现占用空间的垃圾文件

热门文章

  1. [转] 大三下,我们该做什么?
  2. N-Tiers開發方式(ASP/ASP.NET、VB6/VB.NET呼叫使用COM+元件)
  3. java中的super和this_在Java中super和this的区别
  4. Java 并发编程艺术 读书笔记
  5. 【参赛时间延长】InterSystems技术写作大赛:Python
  6. 腾讯云服务器修改ssh端口,简谈腾讯云更换SSH登录端口
  7. 基于ROS机器人的3D物体识别与三维重建(四)视觉SLAM基础(十四讲学习记录)
  8. 宠物小精灵之收服 01背包 POJ4102
  9. Vue数据更新但页面没有更新的多种情况
  10. SQL经典50查询语句(面试题)案例2