使用maven创建单一项目的时候通常用不到聚合项目,创建spring cloud项目时候,由于下面都是一个一个微服务,每个服务对应一个项目,这就需要用到聚合项目,方便对依赖和项目之间的关系进行管理,使用idea创建一个maven项目。
Maven Project
创建父Maven Project
File -- New -- Project
Name -- maven GAV -- Next
Maven Home -- Override Settings File -- Finish
创建完成后,删除父项目下的整个src目录,父项目不做编码,只保留一个pom文件管理依赖,选择Enable Auto-import
引入父Project pom依赖
在pom文件中添加相关依赖
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.example
springcloud
1.0-SNAPSHOT
pom
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
spring cloud
spring cloud study
UTF-8
1.3.2
1.1.10
Hoxton.SR3
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.version}
mysql
mysql-connector-java
8.0.18
com.alibaba
druid-spring-boot-starter
${druid.version}
org.springframework.boot
spring-boot-maven-plugin
1.5.3.RELEASE
true
true
和的作用是统一配置管理,子项目需要引入的公共模块可以在父项目中声明并配置版本,但是子项目还需要显式引用相应的依赖,只是不用再引入,如果子项目有特定的版本需要重新指定版本即可。
聚合项目父项目创建完成。
Maven Module
创建子Maven Module
父项目springcloud右键,New -- Modul -- Maven -- Next
Parent -- Name -- maven GAV -- Finish
cloud-account创建后的目录结构,在pom中引入相应的依赖
引入子Module pom依赖
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.cloud
springcloud
1.0-SNAPSHOT
cloud-order
cloud-order
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-devtools
runtime
true
mysql
mysql-connector-java
runtime
com.alibaba
druid-spring-boot-starter
com.cloud
cloud-commons
1.0
org.springframework
spring-jdbc
org.springframework.boot
spring-boot-maven-plugin
创建完成后在父pom文件中会发现,自动添加了cloud-order module
cloud-order
而子Module中会显示对应的parent
springcloud
org.example
1.0-SNAPSHOT
如果有其他module,可以以这种方式继续添加。
总结:
maven聚合项目,其依赖关系为聚合关系
父项目类型为pom,子项目为jar或者war,如果子项目下面继续有子项目,子项目类型也为pom
maven中的继承关系,只有逻辑上父子关系,聚合项目不仅有逻辑上的包含,父项目会真实的包含子项目
父项目通过modules指明子模块,子模块通过parent表明继承关系