发布于 

微服务: 多 Module 管理工程

简介

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

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

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

说干就干

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

不废话,直接实践开干!

1、打开 IDEA,File/New Project

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

在接下来的步骤中,不需要选择任何依赖。填写完成后,点击 Finish 即可。

删除工程的 src.mvnmvnwmvnw.cmd 这几个目录。

删除后,工程目录如下

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

1
<packaging>pom</packaging>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 继承说明:这里继承SpringBoot提供的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<!-- 项目说明:这里作为聚合工程的父工程,修改打包为pom聚合工程 -->
<groupId>com.veryitman.main</groupId>
<artifactId>blog-main-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>blog-main-server</name>
<description>Blog of main project for Spring Boot</description>

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

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

如下图所示:

2、创建 Module

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

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

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

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

1
2
3
4
5
6
<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,最后工程目录如下:

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

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

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

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

Module 之间的调用

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

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

mz-login-inone 中使用该类的方法。

mz-login-inone 添加依赖 ms-core,如图

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

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

1
2
3
4
5
6
7
8
9
10
@RestController
@RequestMapping("login")
public class MZLoginInoneController {

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

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

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


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


詹姆斯·高斯林 (James Gosling)是一名软件专家,1955年5月19日出生于加拿大,Java 编程语言的共同创始人之一,一般公认他为“Java之父”。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

veryitman