为什么多模块?
比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止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.dsying</groupId>
<artifactId>multiModules</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 项目说明: 这里作为聚合工程的父工程 -->
<!-- 打包方式,默认为jar, 在聚合模式(多模块)中父模块的packing必须为pom -->
<packaging>pom</packaging>
<!-- 模块说明: 这里声明子模块 -->
<modules>
<module>multiModules-web</module>
<module>multiModules-service</module>
<module>multiModules-dao</module>
</modules>
<!-- 继承说明:这里继承SpringBoot提供的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/>
</parent>
<!-- 定义属性 -->
<properties>
<!-- 子模块版本号 -->
<submodule.version>0.0.1-SNAPSHOT</submodule.version>
</properties>
<!-- 版本管理: 这里统一管理子模块的版本号 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.dsying</groupId>
<artifactId>multiModules-web</artifactId>
<version>${submodule.version}</version>
</dependency>
<dependency>
<groupId>org.dsying</groupId>
<artifactId>multiModules-service</artifactId>
<version>${submodule.version}</version>
</dependency>
<dependency>
<groupId>org.dsying</groupId>
<artifactId>multiModules-dao</artifactId>
<version>${submodule.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 继承本项目的父工程 -->
<parent>
<artifactId>multiModules</artifactId>
<groupId>org.dsying</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- web模块的基本信息 -->
<groupId>org.dsying</groupId>
<artifactId>multiModules-web</artifactId>
<version>${submodule.version}</version>
<!-- web模块相关的依赖 -->
<dependencies>
<!-- 不指定版本号时,使用父模块的 dependencyManagement中定义的版本号 -->
<dependency>
<groupId>org.dsying</groupId>
<artifactId>multiModules-service</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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">
<modelVersion>4.0.0</modelVersion>
<!-- 继承本项目的父工程 -->
<parent>
<artifactId>multiModules</artifactId>
<groupId>org.dsying</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- web模块的基本信息 -->
<groupId>org.dsying</groupId>
<artifactId>multiModules-service</artifactId>
<version>${submodule.version}</version>
<dependencies>
<dependency>
<groupId>org.dsying</groupId>
<artifactId>multiModules-dao</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">
<modelVersion>4.0.0</modelVersion>
<!-- 继承本项目的父工程 -->
<parent>
<artifactId>multiModules</artifactId>
<groupId>org.dsying</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- web模块的基本信息 -->
<groupId>org.dsying</groupId>
<artifactId>multiModules-dao</artifactId>
<version>${submodule.version}</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
</project>