文前知识

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

创建父工程

就按正常创建springboot项目就行

把src文件夹删除,以下红框的都可以删除,.gitignore如果用不上git也可以删除

创建子工程

挑一个模块出来详细说,其他模块都是同样道理,就不赘述了。

右键项目新建Module

新建model模块存放各种对象。 注意最后的Package:开始会把sparrow_model也带上,我们把它去掉

创建完成后我们按以下几个步骤来:

  1. 把启动类删除
  2. 修改pom文件<parent>标签中内容改为我们自己建的父工程
  3. 标明打包方式为jar <packaging>jar</packaging>
  4. 添加这个模块所需要的依赖

接下来,先clean,再install

 【注意】:web模块的主程序类不要删除,作为全局的唯一入口

其他按上述步骤依次创建好

主程序所在模块

说一下主程序所在模块的不同点:

首先就是组件扫描,接口层肯定需要用到服务和实体类

这样我们在pom中引入另外两个模块,在使用其他模块的服务时就不会报未定义了。

然后添加打包信息

<!--多模块打包:只需在启动类所在模块的POM文件:指定打包插件 --><build><!-- 设置最终打包的名称--><finalName>sparrow-1.1</finalName><plugins><plugin><!--该插件主要用途:构建可执行的JAR --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--指定Main Class为全局的唯一入口--><mainClass>com.sparrow.web.SparrowWebApplication</mainClass></configuration></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource><!--设置自己目录下的配置文件--><resource><!--下方resources的文件夹名字要和自己项目的文件夹名确认一致才行 很多人就是忽略了名字不一致 --><directory>src/main/resources</directory><includes><include>**/*</include></includes></resource></resources></build>

修改父工程

子模块都创建完成后,修改父模块的pom文件

  1. 添加<packaging>pom</packaging>
  2. 添加子模块信息
  3. 添加依赖管理,我这里随便加的

Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。

服务测试

在sparrow_model中新增User类

@Data
public class User {private Integer id;private String name;
}

那么我在服务层想用的话,就要在sparrow_service的pom文件中加上

在sparrow_service中模拟了一下查询数据

@Service("userService")
public class UserServiceImpl implements UserService {@Overridepublic User getUserById(Integer id) {User user = new User();user.setId(1);user.setName("花无缺");return user;}
}

再把这个服务暴露给接口层,在sparrow_web中新增UserController

@RestController
@RequestMapping("/v1/user")
public class UserController {@AutowiredUserService userService;@GetMapping("/{id}")User getUserById(@PathVariable("id")Integer id){return userService.getUserById(id);}
}

直接启动主程序类,请求接口

打包部署

找到父工程,先clean,再package 

在文件夹中找到打包好的jar包

在这个jar的根目录下执行java -jar sparrow-1.1.jar

补充知识

jar包和war包的区别:

  1. war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。
  2. war包是做好一个web应用后,通常是网站,打成包部署到容器中;jar包通常是开发时要引用通用类,打成包便于存放管理。
  3. war是Sun提出的一种Web应用程序格式,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织;classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)可以打包成jar放到WEB-INF下的lib目录下。JAR文件格式以流行的ZIP文件格式为基础。与ZIP文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用

Springboot父子工程搭建到部署相关推荐

  1. maven父子工程搭建

    父子模块搭建 1. 工程模块图 图片来源:https://striveday.blog.csdn.net/article/details/109218784 2.创建项目 (1)New -> P ...

  2. springboot聚合工程讲解与部署

    1.什么是聚合工程 如下图所示,拥有父子包结构的springboot工程叫做聚合工程.其中父包包括了多个子包(多个项目). 2.聚合工程优势 组件化管理通用功能,动态的添加功能. 统一管理jar包的版 ...

  3. 芝法酱躺平攻略(1)——SpringBoot 多模块 maven工程搭建

    SpringBoot maven工程搭建 一.设计目标 项目结构: 1. 根目录 2. common模块 3. web-common模块 3.1 web模块 3.2 mysql模块 3.3 redis ...

  4. 搭建SpringBoot脚手架工程系列(1):Spring Initializr的超能力

    前言 SpringBoot作为Java后端最主流的技术栈,是每个Java程序员必备的技能.在微服务架构流行的时代,一个普通的企业级项目通常会有5-10个微服务,业务复杂的企业级项目甚至会有20个以上的 ...

  5. springboot工程的热部署

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

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

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

  7. 搭建SpringBoot脚手架工程系列(3): 一键启动服务

    前言 接上篇文章SpringBoot脚手架工程系列(2):代码格式化/质量审核/提交检查,赋予了脚手架工程完善的代码格式化/质量审核/提交检查能力.让我们继续来完善脚手架,提高脚手架的工程本地运行&a ...

  8. SpringBoot技术栈搭建个人博客【项目准备】

    前言:很早之前就想要写一个自己的博客了,趁着现在学校安排的实习有很多的空档,决定把它给做出来,也顺便完成实习的任务(搞一个项目出来...) 需求分析 总体目标:设计一套自适应/简洁/美观/易于文章管理 ...

  9. Idea 创建简单的SpringBoot 父子项目

    背景 使用Idea 创建一个模块化的SpringBoot项目,但是发现Idea 创建父子项目的方式较Eclipse 较为不同,且Idea 创建的过程较Eclipse创建父子项目的过程复杂. Eclip ...

最新文章

  1. 可逼近信道容量编码技术之霍夫曼编码的实现
  2. Java之transient关键字
  3. 嵌入式操作系统内核原理和开发(通用优先级调度)
  4. 容器List之ArrayList详解
  5. 禁用linux的密码策略
  6. Apache Flink 官方文档--流(DataStream API)-旁路输出
  7. 读书笔记《你真的理解什么是财富自由吗?》
  8. idea 一直在updating index的问题
  9. Centos7.5系统部署禅道协调管理系统以及配置优化
  10. POWERVR 是什么
  11. JS获取当前时间的前几天、前几周、前几个月、前几年的时间
  12. 相濡以沫,何能相忘于江湖
  13. VirtualBox 调整屏幕分辨率
  14. postgresql 高可用 repmgr 的使用之四 1 Primary + 1 Standby 的 switchover
  15. android ems具体意义?
  16. Synchronized关键字深度解析
  17. 国外的云服务器网站推荐哪一家(在国内可以直接上的那种)?
  18. asp 打开服务器文件夹,什么是ASP?如何打开ASP文件
  19. 淘宝店铺涨价如何才能把对店铺的影响降低到最低,涨价小技巧分享
  20. 有多少人工智能在“人工”强行“智能”

热门文章

  1. 数据库高级(校招冲刺必备)
  2. linux下使用mdadm组软raid,Linux下使用mdadm创建和管理软raid
  3. 榆熙教育有限公司:拼多多商家应该了解的常用推广方式
  4. 一汽妈妈叫你来看跌停
  5. 笔记本计算机配置型号,笔记本怎么看配置,教您笔记本电脑配置怎么看
  6. 程序安装报错0x80070660的解决
  7. 笑面的学校日常(14)最近一次更新2017 04 06
  8. 为什么c语言是学不完的,为什么C语言诡异离奇、缺陷重重,却获得了巨大的成功?...
  9. 5月3日云栖精选夜读:乾隆会判阿尔法狗死刑吗 ——浅谈当前人工智能的技术进化...
  10. 一万小时定律的数学解释-可怕的复利