如何调整SpringBoot子模块POM,统一Maven多模块项目版本
如何统一Maven多模块中SpringBoot模块与根模块的版本
当前你的monorepo项目中,backend模块直接继承SpringBoot的父pom,导致其版本与根模块、frontend模块不一致(构建时backend版本显示为3.0.2,其他模块为1.0-SNAPSHOT)。要解决这个问题,需要调整父继承关系,并通过根pom统一管理SpringBoot的依赖版本,具体步骤如下:
1. 修改根pom.xml,引入SpringBoot依赖管理
在根pom中添加dependencyManagement节点,导入SpringBoot的依赖版本定义,既保持根模块作为父项目的统一版本控制,又能让子模块复用SpringBoot的预定义依赖版本:
<?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> <groupId>org.example</groupId> <artifactId>multi-module-demo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>frontend</module> <module>backend</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 统一定义SpringBoot版本,方便后续修改 --> <spring-boot.version>3.0.2</spring-boot.version> </properties> <!-- 导入SpringBoot的依赖版本管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
2. 修改backend/pom.xml,继承根pom并调整插件配置
将backend的父项目改为根pom,同时指定spring-boot-maven-plugin的版本(也可后续在根pom的pluginManagement中统一管理),并添加必要的执行配置以确保生成可执行jar:
<?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 --> <parent> <groupId>org.example</groupId> <artifactId>multi-module-demo</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>backend</artifactId> <properties> <java.version>17</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </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> <!-- 使用根pom中定义的SpringBoot版本 --> <version>${spring-boot.version}</version> <!-- 配置repackage目标,确保生成可执行jar包 --> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
3. 验证修改效果
执行mvn clean install命令后,查看Reactor Summary,你会发现backend模块的版本已经和根模块、frontend模块保持一致:
[INFO] Reactor Summary: [INFO] [INFO] multi-module-demo 1.0-SNAPSHOT ..................... SUCCESS [ 0.150 s] [INFO] frontend 1.0-SNAPSHOT .............................. SUCCESS [ 0.784 s] [INFO] backend 1.0-SNAPSHOT ................................ SUCCESS [ 4.102 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS
内容的提问来源于stack exchange,提问作者PumpingSalad
相关产品推荐
相关产品推荐

