父工程
- 对依赖包的版本进行管理
- 本身为Pom工程,对子工程进行聚合管理
基础工程
- 继承父类工程
- 提供基础类库
- 提供工具类库
微服务工程
- 分别从业务、技术方面划分模块,每个模块构建为一个微服务。
- 每个微服务工程依赖基础工程,间接继承父工程。
- 包括:内容管理服务、媒资管理服务、搜索服务、订单支付服务等。
首先要知道 dependencyManagement可以统一管理项目中依赖包的版本号,当需要变更版本号时只需在父pom中修改即可;如果某个子项目需要指定一个特殊的版本号时,只需要在自己项目的pom.xml中显示声明一个版本号即可,此时子项目会使用自己声明的版本号,而不继承父项目的版本号
dependencyManagement与dependencies的区别
dependencies相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承
dependencyManagement里只是声明依赖,并不会自动引入,因此子项目需要显示声明依赖。在子项目中声明了依赖项,且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父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.example</groupId>
<artifactId>course-plantform-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>course-plantform-parent</name>
<description>course-plantform-parent</description>
<packaging>pom</packaging>
<properties>
<!--所有依赖的版本-->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.10</spring-boot.version>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
·····································
··································
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version> 版本
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
由于加了dependencyManagement
parent工程并不会引入依赖
子工程
子工程首先要继承parent
<parent>
<groupId>com.example</groupId>
<artifactId>course-plantform-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../course-platform-parent</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>course-platform-base</artifactId>
<!--加版本号不使用父工程依赖 不加版本号则默认使用父工程版本-->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<verson>3.12.0</verson>
</dependency>
</dependencies>
子工程使用dependencies会引入所有依赖包