文章目录
- 项目框架搭建
- 新建一个Maven项目
- 新建common模块
- 新建dao模块
- 新建service模块
- 新建web模块
- pom文件编写
- common模块:
- dao模块:
- service模块:
- web模块:
- 多模块项目测试
- 聚合和继承的关系
项目框架搭建
首先看一下一个简单的的项目模块骨架,接下来就一步一步搭建多模块项目。
新建一个Maven项目
首先,新建一个Maven项目,将项目下的src目录删除。
新建common模块
在上面新建的Maven项目文件夹下新建一个新的模块common,指定父项为untitled。
新建dao模块
新建dao模块,和新建common模块一样的步骤。
新建service模块
新建service模块,和新建common模块一样的步骤。
新建web模块
新建web模块,和之前的模块不一样的是web模块是springboot项目模块,所以在新建web模块时需要使用Spring Initializr来创建模块。
为web模块添加web相关的starter依赖
完成上面各个模块的创建之后,基本的项目骨架就出来了,接下来在模块的pom文件中添加相关的依赖。
pom文件编写
查看父模块的pom文件,聚合了common、dao、service、web四个模块,如下
查看其余四个子模块,发现有公共部分,都继承了父模块,如下:
common模块:
dao模块:
service模块:
web模块:
接下来,描述以下各个模块之间的依赖关系。common模块一般不依赖任何模块,dao模块一般依赖于common模块,service模块一般依赖于dao模块,web模块一般依赖于service模块。通过理清各个模块之间的关系之后,给模块pom文件添加依赖。
dao的pom文件:
<!-- 指定依赖的父模块 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
service的pom文件:
<!-- 指定需要依赖的模块 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
web的pom文件:
<!-- 指定依赖的模块 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
最后,逐个完善pom文件
父项目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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springboot-multi</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>common</module>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
<properties>
<springboot-version>2.3.0.RELEASE</springboot-version>
<myabits-springboot>2.1.2</myabits-springboot>
<mysql-connector-java>5.1.46</mysql-connector-java>
<lombok-version>1.18.12</lombok-version>
<druid-version>1.1.13</druid-version>
</properties>
<!--统一管理子模块的依赖
如果不用dependencyManagement进行统一管理,
当父工程导入依赖时,统一会给所有的子模块导入父工程所有的依赖
这会造成大量的依赖冗余和冲突。
-->
<dependencyManagement>
<dependencies>
<!--springboot-stater-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springboot-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>${springboot-version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${myabits-springboot}</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java}</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot-multi</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common</artifactId>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
dao模块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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot-multi</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dao</artifactId>
<dependencies>
<!-- 指定依赖的父模块 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
service模块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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot-multi</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dao</artifactId>
<dependencies>
<!-- 指定依赖的父模块 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
web模块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>
<groupId>com.lwz</groupId>
<artifactId>multi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>multi</name>
<description>Demo project for Spring Boot</description>
<parent>
<artifactId>springboot-multi</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<!-- 指定依赖的模块 -->
<dependency>
<groupId>org.example</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
</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>
</dependency>
</dependencies>
</project>
通过以上的步骤,多模块项目就搭建好了,接下来就使用IDEA自带的maven工具对多模块项目进行测试。
多模块项目测试
使用maven工具对多模块项目进行测试,首先对父项目的pom文件进行clean:
clean后输出结果如下:
接下来,对父项目的pom文件进行package,打包后各个模块都会生成target文件夹结果如下:
聚合和继承的关系
聚合主要是为了方便多模块快速构建。而继承主要是为了重用相同的配置。
对于聚合来说,聚合模块是知道被聚合模块的存在的,而被聚合模块是感知不到聚合模块的存在。对于继承来说,父构件是感知不到子构件的存在,而子构件需要使用 parent 来引用父构件。
两者的共同点是,聚合模块和继承中的父模块的package属性都必须是pom类型的,同时,聚合模块和父模块中的除了pom.xml,一般都是没有什么内容的。实际使用是,我们经常将聚合和继承一起使用,能同时使用到两者的优点。