Spring Cloud Ex1:基于Maven构建spring cloud多模块程序

前言

因为国内(至少博主所在城市)的公司大部分还在使用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,可以下载了。

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_maven

下载下来后,将其解压,用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注册中心

工程构建完成后,新建模块。正常来讲,只需要修改模块名和构建工具就可以了,别的不用动。

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_多模块_02

新的模块创建好后,会在pom中自动添加子模块的配置信息,如下图,这里不需要我们做任何处理,只是在idea没有自动添加的时候我们手动添加一下就行了。

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_spring cloud_03

同样的,子模块也会自动添加父模块信息。

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_maven_04

接下来就是正常添加依赖了。

我们要修改的原工程是用gradle构建的,eureka模块的build.gradle配置如下:

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_spring cloud_05

相应的,新工程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注册中心页面了。

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_多模块_06


添加eureka客户端

创建service1模块,结构与原工程保持一致。

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_spring cloud_07

gradle工程的microservices模块依赖信息:

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_spring cloud_08

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已经注册成功。

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_spring cloud_09

再来访问service1的接口:

Spring Cloud Ex1:基于Maven构建spring cloud多模块程序_多模块_10

至此,基于maven的多模块工程配置完毕。


后记

由于本人对于spring cloud 和 maven的了解还比较浅薄,若文中的某些技术细节有不足之处,欢迎雅正。

求财不能,至少求个名。若本人的博文有幸被转载,烦请注明出处~

参考文献

1、SpringCloud | 第一节:多模块maven工程搭建_spring cloud maven多模块 独立构建-****博客

上一篇:鸿蒙NEXT开发案例:亲戚关系计算器


下一篇:selenium自动化复用浏览器-Mac 环境变量配置