IDEA创建SpringBoot父子Module项目的实现

目录
  • 前言
  • 1. 软硬件环境
  • 2. 创建 SpringBoot 项目
  • 3. 构建子 Module
  • 4. 建立父子 Module 依赖
    • 4.1 修改 Parent 项目 packaging
    • 4.2 修改 Module Pom.xml 信息
    • 4.3 删除不必要文件
  • 5. 项目继承关系
  • 6. 发布 WEB 服务

前言

作者正在筹备一个专题 《SpringCloud Alibaba 源码解析》,会在正式发布 SpringCloud Alibaba 源码系列文章之前,将一些准备工作先做好

  • 创建 SpringBoot 父子模块项目
  • Docker 安装 Nacos Server 端
  • Docker 安装 RocketMQ 端

本篇文章从第一步开始详细讲解如何 《创建 SpringBoot 父子模块项目》

如果将 SpringBoot 框架用作与单体项目,可能不存在多模块的情况

但是并不代表没有,因为父子模块并不局限于微服务,单体项目也可以进行明确的职责划分

如果是构建微服务项目,基本上会对模块进行明确的划分,比如:

  • 抽象定义公共代码及Util封装进行引用
  • 业务代码进行单独定义模块
  • 数据库等DB操作相关抽离单独模块
  • 提供外部平台调取的接口单独定义模块

上面的拆分也并非绝对,随着架构师对于项目结构的不同理解,可能会衍生出不同的模块

比较经典的就是 Dubbo 将接口 API 进行抽离提供生产者接口,打为 Jar 包供消费端调用

本篇文章也会从零到一创建 SpringBoot 父子模块的项目,演示聚合、继承的项目特性,并针对不引人注意的知识点进行讲解

在这里假设读者小伙伴已经 掌握了什么是 SpringBoot 概念

1. 软硬件环境

  • 电脑: McaBook Pro
  • 创建项目工具: IDEA 2019.3.4
  • JDK 版本: 还能再坚持20年的 JDK8
  • Maven版本: 3.5.4

2. 创建 SpringBoot 项目

1)首先打开 IDEA 工具,点击 + Create New Project

2)选择 Spring Initializr(初始化),选择Project SDK 1.8,使用默认的 SpringBoot 脚手架即可

大家可以访问 Default 的网址,在这个网址中也可以进行 SpringBoot 项目的创建

3)创建项目详细信息,会逐一进行讲解

Group: 项目组织唯一的标识符,实际对应 Java 的包的结构,是 main 目录里 Java 的目录结构

Group 也就是 groupId,分为多个段;一般情况下 第一段为域,第二段为公司,第三段为项目名称

以 Nacos 源码进行举例,Group 为 com.alibaba.nacos

com 为商业组织,alibaba 为公司名称,nacos 就是项目名称

Artifact: 项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称

Artifact 即为 artifactId,还是以 Nacos 举例,因为最近在看它~

Nacos 不同功能组件的 artifactId 各不相同,比如权限相关的子模块就是 nacos-auth,客户端相关是 nacos-client,具体到了项目功能组件

Type: 分为四种不同的类型,日常我们选择默认第一条就行,也就是 Maven Project

Language: 开发语言的话自然就是默认的 Java

Packaging: 打包方式,分为 War 包 和 Jar 包,这里选择 Jar 包

Java Version: 选择 Java 的一个版本,再坚持 20 年的 JDK 1.8

Version: 当前项目的一个版本,SNAPSHOT 为快照的意思

开发时一般使用此类型,因为对于 Maven 仓库的同步较为友好,有不同纬度的同步选择

Name: 定义项目名称

Description: 定义项目描述信息,帮助别人更好的了解项目

Package: 定义 main.java 目录下的结构

最终定义项目选项及配置名称如下,点击 Next 按钮继续进行

4)选择 SpringBoot 版本信息以及 Pom.xml 文件依赖组件

这里选择的 SpringBoot 版本是 2.2.10,选择了 Spring Web 当作 Maven 依赖项

后续会使用发布 Web 测试项目整体是否成功,接下来点击 Next 继续进行下一步

5)这里需要确定项目名称以及项目的存放地址,确认无误点击 Finish

6)一个标准的 SpringBoot 项目就产生了

3. 构建子 Module

1)Mac 电脑是点击菜单栏中 File -> New -> Module,Windos 中可能会有一点差异

2)这里就是重复上述在创建 SpringBoot 项目时的步骤,Next 下一步

3)Group 与 Parent 项目保持一致即可,Artifact 修改为 Module 项目作用域名城即可

4)配置可按照需求进行选择,因为不同的 Module 需要引用不同的 Pom 依赖,后面会与 Parent 保持一个交互

5)确认创建信息,点击 Finish 生成项目

6)最终结构目录如下,项目已成功创建,后续我们要修改其中的 Pom.xml 使其成为真正的父子项目

4. 建立父子 Module 依赖

如果将建立的 Parent 项目与后面创建的 Module 产生关联,需要改动以下几点

  • 修改 Parent 项目 Pom.xml 的 packaging 标签打包方式为 pom
  • 修改 Module 项目 Pom.xml 文件依赖 Parent 项目
  • 删除不必要文件并梳理 Pom.xml 依赖上下级关系

4.1 修改 Parent 项目 packaging

打开 Parent 项目的根 Pom.xml 文件,新增下方代码

<packaging>pom</packaging>
<modules>
    <module>bootdemo-remote-api</module>
</modules>

packaging 包含三个值 Jar、War、Pom,默认 Jar的方式

首先来解释下 packaging 为 Pom 的意思,宏观而言即没有代码需要测试或者编译,也没有资源需要处理

  • Jar: 内部调用或作为服务进行发布使用
  • War: 需要部署的项目
  • Pom: 寓意为一个父级项目,一般作为项目聚合和依赖传递使用

modules 代表了 Parent 项目下的子 Module,体现了聚合的思想

这里把 Parent 项目的 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.machen.bootdemo</groupId>
    <artifactId>bootdemo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bootdemo-parent</name>
    <description>创建 SpringBoot 父子模块项目</description>
    <packaging>pom</packaging>
    <modules>
        <module>bootdemo-remote-api</module>
        <module>bootdemo-biz</module>
    </modules>
    <properties>
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

spring-boot-maven-plugin 的作用是运行 mvn package 时会将项目打包为可运行的 jar 包,java -jar 运行即可

如果不加这个 pluginsjava -jar xxx.jar 会报出如下错误

xxx/target/bootdemo-remote-api-0.0.1-SNAPSHOT.jar中没有主清单属性

4.2 修改 Module Pom.xml 信息

创建后的 Module 项目的 Parent 信息是 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.machen.bootdemo</groupId>
        <artifactId>bootdemo-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>bootdemo-remote-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bootdemo-remote-api</name>
    <description>SpringBoot Module 项目</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
</project>

4.3 删除不必要文件

删除 bootdemo-parent 项目下 src 包,因为 bootdemo-parent 作为聚合型项目,不会产生业务数据以及相关配置

另外说一下 dependenciesdependencyManagement 标签做一个讲解

dependencies

如果 Parent 项目中使用 dependencies 标签,标签内的依赖默认传递子 Module,不用子 Module 进行显示书写依赖

dependencyManagement

dependencyManagementdependencies 不同的是,标签内的依赖不会默认传递子 Module,其作用只是为了统一版本声明

如果子 Module 依赖 Parent 项目中 dependencyManagement 标签内的 pom 依赖,需要显示在子 Module 的 pom 文件中进行书写

5. 项目继承关系

我们按照《构建子 Module》章节的内容,构建出如下所述的子 Module

<groupId>cn.machen.bootdemo</groupId>
<artifactId>bootdemo-biz</artifactId>
<version>0.0.1-SNAPSHOT</version>

然后修改 bootdemo-biz 子 Module 的 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.machen.bootdemo</groupId>
        <artifactId>bootdemo-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>bootdemo-biz</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bootdemo-biz</name>
    <description>创建 SpringBoot 父子模块业务 Module</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
      	<!--继承bootdemo-remote-api项目-->
        <dependency>
            <groupId>cn.machen.bootdemo</groupId>
            <artifactId>bootdemo-remote-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

通过继承关系的设置,bootdemo-remote-api 中的代码就可以被 bootdemo-biz Module 项目进行引用

6. 发布 WEB 服务

在 Parent 项目 Pom.xml dependencies 标签中定义了 spring-boot-starter-web 依赖,直接使用 web 相关内容即可

我们在 bootdemo-biz 中创建 Controller 控制器

@RestController
public class DemoController {
    @GetMapping("/echo/{name}")
    public String sayHello(@PathVariable("name") String name) {
        return "Hello World " + name;
    }
}

启动后端项目成功后,浏览器输入 http://localhost:8080/echo/mahua 请求后端服务

到此这篇关于IDEA创建SpringBoot父子Module项目的实现的文章就介绍到这了,更多相关IDEA 创建SpringBoot父子项目内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用IDEA创建maven父子工程项目 (图文)

    目录 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 第八步: 第九步: 第十步: 第一步: 打开IDEA,点击create new project,如果没有弹出如下界面,就先将打开的项目关闭,然后重新打开IDEA即可 一开始创建父工程,所以不用选中create from archetype,点击next,如下图: 第二步: GroupId(一般填反转后公司域名)和ArtifactId(项目名)还有Version,这三个属性目的是标识你的项目的唯一性,点击next,如下图:

  • IDEA 中创建SpringBoot 父子模块的实现

    新建父级项目 父级模块添加完成! 添加子模块 在父级模块又击 选择 new ==> Moudule 创建方式与父级模块创建大致一致,唯一不同的是将 Type 改为 Maven Project 打开父级项目 demo-parent 下的pom.xml 文件 复制以下三行配置信息 打开子项目 demo-son 下的pom.xml文件 将parent 节点下的前三行代码替换成为刚刚复制的那三行,如下显示 最后,在demo-parent 模块下 的pom.xml文件下新建modules节点,并添加子模块

  • IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能

    一.搭建SpringBoot项目 1.1.file --> new --> project--> Spring Initializr--> next--> next--> next--> finish 注意选择包依赖关系 二.springboot整合mybatis.mysql 2.1.整体结构 2.2.设置所需要的依赖 即pom.xml文件 <?xml version="1.0" encoding="UTF-8"?&g

  • IDEA创建SpringBoot的maven项目的方法步骤

    记录IDEA编程工具创建SpringBoot的maven项目过程: 新建项目 选择maven项目及JDK,点击下一步: 选择好项目路径,输入项目名称,点击完成就可以啦: 创建完成效果: 配置pom.xml文件 新建项目需要引入springboot的依赖,这里选择2.4.4版本. 完整pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.ap

  • springboot创建多module项目的实例

    目录 创建项目 创建demo-parent 创建demo-api 创建demo-common 修改各个项目的pom文件 修改demo-root的pom.xml 修改demo-api的pom.xml 修改demo-common的pom.xml 使用springboot创建多module项目,以前也做过多次,一段时间不用又忘了,在这里做个记录 项目名称 作用 说明 demo-root 根项目 父项目,只用来管理其他module,提供基础的pom配置 demo-api 启动项目 api项目,启动类放在

  • Intellij IDEA创建spring-boot项目的图文教程

    开发环境: jdk版本:JDK8 maven版本:maven-3.5.2 开发工具:Itellij IDEA 2017.1 前提条件:已安装以上软件并配置好jdk和maven的环境变量 创建步骤: 点击坐上角file --->选择new --->点击project... 如下图所示: 点击左边Spring Initializr ---> 右上角新建jdk(若有则不需要) ---> 点击next 如下图所示: 看需求修改下图中的信息后点击next(可以直接使用默认) 点击左边的Web

  • 从零开始使用IDEA创建SpringBoot项目(图文)

    *注:此文章谨以记录学习过程,分享学习心得! 刚刚开始了解SpringBoot框架,觉得很好用,觉得很有必要深入学习一下该框架,现在就来创建一个SpringBoot项目: 1.在IDEA上新建一个Project,选择Spring Initializr, Project SDK 选择安装的JDK: Choose Initializr Service URL 选择默认(Default:https://start.spring.io) 选择项目模板 点击Next 2.进行项目配置 设置项目数组(gro

  • 在idea中创建SpringBoot项目

    使用Spring Initializr新建项目 新建一个Spring Boot项目,推荐使用Spring Initializr的方式.以该方式创建项目需要连接网络,它会自动查询Spring Boot的当前版本和组件列表. 1.在idea界面,依次点击左上角菜单栏File-->New-->Project.选择Spring Initialize,Project SDK选择1.8,点击Next. 2.输入GroupId.ArtifactId,点击Next. 3.勾选Web,点击Next. 4.输入项

  • IDEA2020.1创建springboot项目(国内脚手架)安装lombok

    使用IDEA创建springboot项目,可以借助于脚手架来进行可视化操作点选依赖等,非常的方便.并且还可以主动为我们安装项目当中使用到但没有安装的插件等.不过默认的脚手架位置是在国外,网速不稳定或较差时经常会出现连接不上的情况.恰好最近阿里云新出了国内版脚手架:http://maven.aliyun.com/,这样就不用担心连接不上的问题了.让我们一起看看如何使用IDEA创建springboot项目吧. 图1.左上角"File" -> "New" ->

  • IDEA创建springboot + mybatis项目全过程(步骤详解)

    鉴于隔很久再在IDEA新建springboot项目时,会出现对步骤不确定的情况,因此,写下这篇博客记录创建一个可运行的springboot+mybatis项目的全过程. 步骤如下: 1.打开IDEA 2.File ==> new ==> project ,如图: 3.选择spring Initializr ==> 右边的Project SDK我选的是我已经安装的1.8版本,其他默认 ==> 点击next 4.填写Group (自己随意就行,我的是cn + 个人英文名 + study

  • IDEA2020.2创建springboot项目卡死在reading maven project的问题

    解决方法一 问题描述: 昨天更新IDEA2020.2版本后,创建springboot项目的时候发现一直在reading maven project 中,如下图,而且一点setting(想修改本地maven路径)时,IDEA就卡死,而且打开任务管理器发现IDEA高占CPU. 原因: 猜测是2020.2版本问题,用其他版本没有出现这类情况. 由于第一次用spring Initializr创建maven的项目,它不会找IDEA自带的maven,也不会找你配置的本地maven,而是重新下载一个全新的ma

随机推荐

其他