最近起个小项目,用多模块搭建一下,顺便记录分享
通过Spring Lnitalizer创建,
我这里使用的是 springboot 2.7.3 + jdk11
创建好后删除刚创建工程里不需要的文件, 只保留:.idea 文件夹 、项目 pom 文件、以及一个 *.iml 文件
我们创建 archives_common,archives_web,archives_biz,archives_manage 4个模块
删除多余目录和文件,每一个模块只保留src下的java路径,pom.xml文件,即可,如下图
对于 src 里的内容,只保留 archives_web 的启动类和配置文件,其他子模块的的启动类和配置文件都删除
将父工程 pom.xml 文件修改成如下内容,里面声明该父工程包含的子模块,同时抽取统一的配置信息和依赖版本控制,这样可以方便子 pom 直接引用,简化子 pom 的配置
1、多模块项目中,父模块打包类型必须是 pom。
2、因为开发框架是 spring boot,父模块默认继承 spring-boot-starter-parent,因此可以删除 spring-boot-starter 和 spring-boot-starter-test 依赖
<?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>
<groupId>com.tt</groupId>
<artifactId>archives</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>archives</name>
<description>Demo project for Spring Boot</description>
<!-- 父模块打包类型必须为pom -->
<packaging>pom</packaging>
<!-- parent指明继承关系,给出被继承的父项目的具体信息-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>11</java.version>
</properties>
<!-- 模块说明:这里声明多个子模块 -->
<modules>
<module>archives_biz</module>
<module>archives_manage</module>
<module>archives_common</module>
<module>archives_web</module>
</modules>
<!-- 版本说明:这里统一管理依赖的版本号 -->
<dependencyManagement>
<dependencies>
<!--spring-boot-starter-parent中有 可以删除-->
<!--<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>-->
<dependency>
<groupId>com.tt</groupId>
<artifactId>archives_web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tt</groupId>
<artifactId>archives_biz</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tt</groupId>
<artifactId>archives_common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tt</groupId>
<artifactId>archives_manage</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
子模块的配置信息会继承父模块的
archives_common的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>com.tt</groupId>
<artifactId>archives</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tt</groupId>
<artifactId>archives_common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>archives_common</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</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>
archives_manage archives_biz 子模块需要引入 archives_common 子模块 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>com.tt</groupId>
<artifactId>archives</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tt</groupId>
<artifactId>archives_biz</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>archives_biz</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.tt</groupId>
<artifactId>archives_common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
archives_web为启动模块 需要添加 spring-boot-starter-web 依赖
<?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>com.tt</groupId>
<artifactId>archives</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tt</groupId>
<artifactId>archives_web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>archives_web</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
指定 SpringBootApplication的 scanBasePackages 或者 将启动类往外提一层,确保组件会被扫描到
目前项目启动类 ArchivesWebApplication在 com.tt.archives_web 包下面,我们需要将其移动移动到 com.tt 包下
启动启动类
至此,多模块工程创建完毕。