简介

在 微服务-想办法让项目运行起来 这篇文章中,介绍了如何使用 IDEA 开发工具搭建本地的微服务开发环境,通常我们会把一个微服务项目分解成多个服务,那么为了更好的管理该项目,大家一般都会在 IDE 里面通过多 Module 来进行管理。这里的多 Module 可以理解为多个 SpringBoot 项目。

近期收到一些小伙伴的反馈,在使用 IDEA 搭建多 Module 的时候总会遇到一些莫名其妙的问题,甚是让人烦恼。趁此机会给大家介绍一下。

下面的实践,使用的是 IntelliJ IDEA 2020.2 版本,2019.x 版本也是同样的创建方法。

说干就干

一些在你看来并不起眼的工作,对于别人来说可能是难以逾越的鸿沟。

不废话,直接实践开干!

1、打开 IDEA,File/New Project

idea 控制台显示微服务启动类 idea启动多个微服务_java

选择 Spring Initializr,工程类型选择 Maven。

idea 控制台显示微服务启动类 idea启动多个微服务_idea 控制台显示微服务启动类_02


idea 控制台显示微服务启动类 idea启动多个微服务_java_03


填写完成后,点击 Finish 即可。删除工程的 src.mvnmvnwmvnw.cmd 这几个目录。

idea 控制台显示微服务启动类 idea启动多个微服务_微服务_04


删除后,工程目录如下

idea 控制台显示微服务启动类 idea启动多个微服务_java_05


修改 pom.xml 文件,增加如下内容:

<packaging>pom</packaging>

Maven 项目中,packaging 给出了项目的打包类型,即作为项目的发布形式,其可能的类型。

Maven 3 中,其可用的打包类型如下:

  • jar,默认类型
  • war
  • ejb
  • ear
  • rar
  • par
  • pom
  • maven-plugin

如下图所示:

idea 控制台显示微服务启动类 idea启动多个微服务_微服务_06


在工程名称上面右键新建 module,如下图

idea 控制台显示微服务启动类 idea启动多个微服务_微服务_07


2、创建 Module这里以创建 SpringBoot Module 为例,使用 Spring Initializr 创建 Module

idea 控制台显示微服务启动类 idea启动多个微服务_java_08


按照你自己的需求填写对应的信息即可进入到下一步直至 Finish.

idea 控制台显示微服务启动类 idea启动多个微服务_intellij idea_09


此时,修改该 module 的 pom 文件,如下(将从工程继承而不是从spring boot继承)所示:

<parent>
    <groupId>com.veryitman.main</groupId>
    <artifactId>project-xxx-server</artifactId> <!-- 工程名称 -->
    <version>0.0.1-SNAPSHOT</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

同理,再新建一个 mz-payment-inoneModule,最后工程目录如下:

idea 控制台显示微服务启动类 idea启动多个微服务_idea 控制台显示微服务启动类_10


同理, mz-payment-inone 建立好之后也修改一下它的 pom 文件中的 <parent> 标签内容。

所有的 module 建立完成之后,在 工程的 pom 中增加 module 的说明即增加 <module> 标签 ,如下:

<!-- 模块说明:这里声明多个子模块 -->
<modules>
    <module>ms-login-inone</module>
    <module>mz-payment-inone</module>
</modules>

至此,工程中多 Module 已经创建完成👏,接下来再给大家介绍一下 Module 之间如何相互调用。

Module 之间的调用

按照上面的方法,我再次创建了一个 mz-coreModule,该 Module 为 上面两个 SpringBoot Module 提供基础的方法。

mz-core 中增加了一个 MZDateUtil 类和对应的方法

idea 控制台显示微服务启动类 idea启动多个微服务_java_11


mz-login-inone 中使用该类的方法。为 mz-login-inone 添加依赖 ms-core,如图

idea 控制台显示微服务启动类 idea启动多个微服务_java_12


mz-login-inonepom.xml 文件中添加如下代码

idea 控制台显示微服务启动类 idea启动多个微服务_java_13


编写 API 进行测试,在 mz-login-inoneMZLoginInoneController 中增加如下代码

@RestController
@RequestMapping("login")
public class MZLoginInoneController {

    @GetMapping(value = "inone")
    public String loginInone() {

        return "Current date: " + MZDateUtil.currentDate();
    }
}

运行 mz-login-inone,在浏览器访问该接口,显示如下:

idea 控制台显示微服务启动类 idea启动多个微服务_spring boot_14


如果你在使用过程中还有遇到奇葩的问题,欢迎留言评论,感谢阅读!