多个SpringBoot子工程的Maven工程方案
背景
最近新建了一个Maven工程,里边主要有3子工程,其中2个是可以独立部署的,所以都创建为SpringBoot工程,其中1个是公共Service的工程,故为常规的Maven工程。
我们都知道SpringBoot工程,本身就继承SpringBoot的parent工程,而不是继承图中的Maven父工程,但是我们就是要SpringBoot子工程继承图中Maven父工程,如何处理这一问题呢?
方案
方案其实很简单,就是让Maven父工程继承SpringBoot的parent工程,而SpringBoot工程再继承Maven父工程即可,无需继承SpringBoot的parent工程,就可以达到想要的独立部署的效果。
1.Maven父工程
我们在其pom配置中,
- 加入parent模块,内容为SpringBoot的parent工程。
- 加入modules模块,内容为3个子工程。
- 将packaging指定为pom。
如此便完成Maven父工程的依赖配置。
<?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>
<!-- 父工程继承SpringBoot的parent工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/>
</parent>
<groupId>org.example</groupId>
<artifactId>multi-springboot</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 子工程 -->
<modules>
<module>client</module>
<module>service</module>
<module>server</module>
</modules>
<!-- 子工程依赖 -->
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
2.SpringBoot子工程
两个SpringBoot的子工程的pom配置一样,选其中一个作为案例,
- 将parent配置改为maven父工程。
- 将packaging指定为war
其中也可以加入公共工程的依赖,使用其提供的服务。
<?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>
<!-- 父工程为继承Maven父工程 -->
<parent>
<groupId>org.example</groupId>
<artifactId>multi-springboot</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>client</name>
<description>client</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- 子工程-公共服务-->
<dependency>
<groupId>org.example</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<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>
</plugin>
</plugins>
</build>
</project>
3.Maven子工程
平平无奇,就一个简单的maven工程,主要改动点如下:
- 将packaging指定为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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 父工程为继承Maven父工程 -->
<parent>
<groupId>org.example</groupId>
<artifactId>multi-springboot</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>jar</packaging>
<name>service</name>
<description>service</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>
</plugin>
</plugins>
</build>
</project>
其他
本案例的代码,已经上传到github了,需要的同学,可以自行下载查阅:
https://github.com/larger5/multi-springboot