前言
因为国内(至少博主所在城市)的公司大部分还在使用Maven构建工程,考虑到工作中的实际生产需要,本文将记录如何使用Maven构建多模块工程,便于本人和其他有类似需求的同仁日后查找翻阅。
本文源码可在 Gitee 上下载。
本文涉及到的主要工具和模块有:
注册和发现中心:Eureka Server
客户端程序:Eureka Client
开发IDE:Idea社区版
本文将在我的博客Spring Cloud 5.4: 将多工程整合成多模块工程-eureka client + openfeign二合一 中的源码的基础上,只保留Eureka server注册中心和一个client,并将构建工具由gradle改成Maven。
本文的重点在于Maven的多模块配置,单模块的依赖配置作为构建springboot程序的基础知识,将不在本文中赘述。
只要能够使用Maven配置spring cloud多模块工程,那么Maven的其他构建问题也都能迎刃而解。
声明:博文中的代码是直接从maven仓库下载的相关插件和依赖,有需要的同学请自行配置国内仓库镜像。
正文
创建工程
首先构建eureka server注册中心。
因为本人是用的社区版,没有办法在Idea中直接使用spring Initializr功能,所以要先去start.spring.io下一个基础的springboot工程,工程中会有一些基础配置。
构建工具选Maven,版本随便选,之后还得改,定义好项目包名、打包类型、jdk版本,再加两个依赖:web和devtools,可以下载了。
下载下来后,将其解压,用idea导入工程,等待idea(或者说Maven)下载依赖、编译,同时删掉src目录,父工程中不需要写代码。
接下来修改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 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>
<!-- 根据官方文档,spring-cloud-dependencies2023.0.2适配springboot版本在3.2.6最为合适 -->
<version>3.2.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hao1st</groupId>
<artifactId>demo-springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo-springcloud</name>
<description>Demo project for Spring Boot</description>
<!-- 指定为pom,不进行打包 -->
<packaging>pom</packaging>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
<!-- 指定spring cloud版本 -->
<spring-cloud.version>2023.0.2</spring-cloud.version>
</properties>
<dependencies>
<!-- 删掉spring-boot-starter-web,父工程不需要 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 指定全体工程的依赖管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
修改完成后,重新构建工程。
添加eureka注册中心
工程构建完成后,新建模块。正常来讲,只需要修改模块名和构建工具就可以了,别的不用动。
新的模块创建好后,会在pom中自动添加子模块的配置信息,如下图,这里不需要我们做任何处理,只是在idea没有自动添加的时候我们手动添加一下就行了。
同样的,子模块也会自动添加父模块信息。
接下来就是正常添加依赖了。
我们要修改的原工程是用gradle构建的,eureka模块的build.gradle配置如下:
相应的,新工程eureka的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>
<parent>
<groupId>com.hao1st</groupId>
<artifactId>demo-springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>eureka</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
</project>
配置完pom信息,接下来把原工程的配置和代码原封不动移植过来就行了。
这里为了缩减篇幅就不再重复操作步骤了,源码位置已经在文章开头给出。
配置好后,访问localhost:9000就可以看见eureka注册中心页面了。
添加eureka客户端
创建service1模块,结构与原工程保持一致。
gradle工程的microservices模块依赖信息:
maven工程的microservices模块依赖信息:
<?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>
<parent>
<groupId>com.hao1st</groupId>
<artifactId>demo-springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>microservices</artifactId>
<packaging>pom</packaging>
<modules>
<module>service1</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
同样,把gradle工程的配置和源码移植到新的maven工程下。
都配置好后,我们可以依次启动eureka和service1两个模块,这时候,在localhost:9000下可以看到service1已经注册成功。
再来访问service1的接口:
至此,基于maven的多模块工程配置完毕。
后记
由于本人对于spring cloud 和 maven的了解还比较浅薄,若文中的某些技术细节有不足之处,欢迎雅正。
求财不能,至少求个名。若本人的博文有幸被转载,烦请注明出处~
参考文献
1、SpringCloud | 第一节:多模块maven工程搭建_spring cloud maven多模块 独立构建-****博客