目录
一、目录结构
├─config
│ └─bom # 全局bom,统一管理版本和依赖
├─services
│ ├─auth-service
│ ├─gateway
│ └─iam-service
└─shared
└─common
├─core
└─jwt
├─bom # root parent bom 继承全局bom,只管理插件依赖
二、全局bom格式
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 关键:不继承父POM! -->
<groupId>com.xloda</groupId>
<version>1.0.0</version>
<artifactId>bom</artifactId>
<packaging>pom</packaging>
<description>XLODA Cloud Bom Manager</description>
<properties>
<!-- 框架版本 -->
<spring.boot.version>3.5.9</spring.boot.version>
<spring.cloud.version>2023.0.5</spring.cloud.version>
<spring.cloud.alibaba.version>2023.0.1.0</spring.cloud.alibaba.version>
<xloda.cloud.version>1.0.0</xloda.cloud.version>
<!-- 配套中间件版本(兼容性最优) -->
<nacos.version>2.3.2</nacos.version>
<sentinel.version>1.8.7</sentinel.version>
<seata.version>1.7.1</seata.version>
<rocketmq.version>5.2.0</rocketmq.version>
<spring.cloud.gateway.version>4.1.5</spring.cloud.gateway.version>
<spring.cloud.loadbalancer.version>4.0.5</spring.cloud.loadbalancer.version>
<resilience4j.version>2.1.0</resilience4j.version>
<!-- API文档 -->
<knife4j.openapi3.version>4.5.0</knife4j.openapi3.version>
<!-- 工具类 -->
<lombok.version>1.18.34</lombok.version>
<jjwt.version>0.12.6</jjwt.version>
<fastjson2.version>2.0.54</fastjson2.version>
<hutool.version>5.8.43</hutool.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- SpringBoot BOM -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud BOM -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloudAlibaba BOM -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- ========== 项目自有模块 ========== -->
<!-- 公共模块 -->
<dependency>
<groupId>com.xloda</groupId>
<artifactId>core</artifactId>
<version>${xloda.cloud.version}</version>
</dependency>
<dependency>
<groupId>com.xloda</groupId>
<artifactId>jwt</artifactId>
<version>${xloda.cloud.version}</version>
</dependency>
<!-- ========== 常用第三方依赖 ========== -->
<!-- API文档 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.openapi3.version}</version>
</dependency>
<!-- 工具类 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastjson2.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!-- JJWT(JWT核心依赖) -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>${jjwt.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>${jjwt.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
三、根项目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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.xloda</groupId>
<artifactId>bom</artifactId>
<version>1.0.0</version>
<relativePath>config/bom/pom.xml</relativePath>
</parent>
<artifactId>xloda-cloud</artifactId>
<packaging>pom</packaging>
<description>XLODA Cloud Root Parent Module</description>
<modules>
<module>shared/common</module>
<module>services/gateway</module>
<module>services/auth-service</module>
<module>services/iam-service</module>
</modules>
<properties>
<java.version>21</java.version>
<maven.compiler.release>${java.version}</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<!-- 插件版本管理:仅声明版本,子模块需显式引用才生效 -->
<pluginManagement>
<plugins>
<!-- 统一管理Spring Boot打包插件版本 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version> <!-- 复用BOM中的Spring Boot版本 -->
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
四、微服务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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.xloda</groupId>
<artifactId>xloda-cloud</artifactId>
<version>1.0.0</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>auth-service</artifactId>
<description>Authentication and Authorization Service</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.xloda</groupId>
<artifactId>core</artifactId>
</dependency>
<dependency>
<groupId>com.xloda</groupId>
<artifactId>jwt</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <!-- 关键:仅测试阶段生效 -->
<!-- 排除JUnit4兼容引擎:Spring Boot 3.x默认用JUnit5,避免依赖冗余 -->
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<finalName>auth-service</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 生成可执行JAR核心 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
注意这里需要配置relativePath,且路径指向父项目pom的位置,否则maven clean可能会报错!!!
最终,实现了功能完全的bom模块引入模式架构。