最近起个小项目,用多模块搭建一下,顺便记录分享
1.创建父工程
通过Spring Lnitalizer创建,
我这里使用的是 springboot 2.7.3 + jdk11
创建好后删除刚创建工程里不需要的文件, 只保留:.idea 文件夹 、项目 pom 文件、以及一个 *.iml 文件
2.创建子模块
我们创建 archives_common,archives_web,archives_biz,archives_manage 4个模块
删除多余目录和文件,每一个模块只保留src下的java路径,pom.xml文件,即可,如下图
对于 src 里的内容,只保留 archives_web 的启动类和配置文件,其他子模块的的启动类和配置文件都删除
编辑父工程的pom.xml文件
将父工程 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>
编辑子模块pom.xml
子模块的配置信息会继承父模块的
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 包下
启动启动类
至此,多模块工程创建完毕。