多modules的好处?
- 首先是实现了各个模块之间的解耦,模块可以单独调用,性能会更好
- 多module的层次更明显,使项目结构更清晰,便于管理,出现问题时也更好排查原因
- 逼格更高
层级关系
实际上就是MVC
- dao层依赖model
- service层依赖dao、model
- web层依赖dao、model、service
多模块项目创建
首先使用SpringBoot initalizr创建一个Maven工程,并删除父项目中的src目录,只留一个pom.xml文件
注意:父项目中无需打包,可设置
packaging
为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>com.qd</groupId>
<artifactId>magina</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>magina</name>
<description>Demo project for Spring Boot</description>
<!--声明子项目-->
<modules>
<module>magina-dao</module>
<module>magina-service</module>
<module>magina-model</module>
<module>magina-web</module>
</modules>
<!--这里作为聚合工程的父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--这里继承SpringBoot提供的父工程-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!--项目依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.41</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.9</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
依次在项目上创建子模块
- magina-model
- magina-dao
- magina-service
- magina-web
此时父pom中会自动生成子模块依赖,子模块的parent也会使用顶层的父项目
<modules>
<module>magina-dao</module>
<module>magina-service</module>
<module>magina-model</module>
<module>magina-web</module>
</modules>
完整的项目结构如下
子项目pom文件如下,此处举个栗子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>magina</artifactId>
<groupId>com.qd</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>magina-dao</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.qd</groupId>
<artifactId>magina-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
</dependency>
</dependencies>
</project>
子项目中
packaging
需要打成jar包