栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【微服务】maven聚合及继承关系在spring cloud项目中的原理及应用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【微服务】maven聚合及继承关系在spring cloud项目中的原理及应用

1. 前言 1.1 maven官网 1.2 本文需要解释清楚的知识点
    maven的聚合和继承是两个不同的特性(官网的说法),看懂spring cloud项目需要同时掌握聚合和继承的概念与设计模式中的基本概念一脉相承,以下用java类比弄清楚 中的 和 普通 的区别相同原理下的用法
1.3 需要的前置知识
    了解maven 的独立安装及配置了解maven 生命周期了解maven 的spring boot插件spring-boot-maven-plugin 的命令行方式打包
1.4 文中的词典
    开发者的spring cloud项目 – 微服务的项目开发者的spring boot项目 – 微服务架构中的子微服务开发者顶级的spring boot项目 – 微服务架构中有着统一配置作用的微服务spring boot框架 – spring团队开发的框架
2. 继承

单继承,由子类控制,group id 默认继承至父项目

group id 通常是指一个大项目的域名或唯一标识,一个spring cloud项目只有一个group idartifact id 具有实义的模块名,形如:spring-boot-starter-parent

spring boot框架的group id :org.springframework.boot
spring boot项目的group id : 项目开发者自定义,但是要统一
spring cloud项目的group id : 所有spring boot统一化配置的group id


当我们在选择spring cloud版本时,常常就是用一个spring boot项目作为版本管理的项目,即:
spring boot 2.5.x
||
微服务项目中顶级项目cloud 继承 spring boot 2.5.x ,并约定spring cloud版本
||
微服务的其他版本继承cloud项目, 并在约定好spring cloud 版本中选择套件

2.1 顶级父类pom配置
    parent
    com.james
    0.0.1-SNAPSHOT
2.2 单继承下的子类pom 配置
	
        father
        com.james
        0.0.1-SNAPSHOT
    
    parent-eureka-server

顶级父类不需要写, 子类都需要写。接下来探究spring boot 框架下的顶级父类

类比 java

public class Parent { void dependencies(){} }
public class Son extends Parent{ }
2.3 spring boot 运用的继承关系

开发者的spring cloud项目 由 开发者的spring boot项目组成的,则开发者顶级的spring boot项目也是一个spring boot项目。
所以pom结构:开发者顶级的spring boot项目 继承 spring-boot-starter-parent

    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.8
    
    com.james
    cloud
    0.0.1-SNAPSHOT
    cloud

看继承关系中得到的依赖, 向上找父项目spring-boot-dependencies

 
    org.springframework.boot
    spring-boot-dependencies
    2.5.8
  
  spring-boot-starter-parent
  pom
  spring-boot-starter-parent
  Parent pom providing dependency and plugin management for applications built with Maven

确定spring boot框架 最顶级的依赖是spring-boot-dependencies

spring-boot-dependencies 使用 规定了子类所有的默认依赖

区别于直接写 仅仅是子类的依赖版本声明,不会去中央仓库下载jar包,在子类不写依赖版本的前提下自动引入父类的版本管理,子类可以自由选择是否继承。而无 包裹下的 是指当前类也就是父类的依赖,会从中央仓库下载jar包并导入classpath,所有子类也自动依赖父类下载的jar包并导入classpath。

2.4 项目中使用继承引入spring cloud版本管理

通过 下的 ,让cloud项目中的顶级项目声明 spring cloud 的依赖的版本管理。
总的来说,spring boot框架使用声明了开发者的spring boot项目的依赖,spring 开发者的spring boot项目用 声明了开发者的spring cloud项目的依赖,总的来说,就是使用maven继承关系管理了项目的依赖。

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    
3. 聚合 3.1 顶级父类pom配置
    
    pom

    
    
        cloud-order 
        cloud-eureka-server
        cloud-supplier
    

类比 Java

public class Parent {
    Son son;
    Girl girl;
}
3.2 spring cloud 使用聚合实现被聚合项目的统一打包

在顶级项目目录执行

mvn package spring-boot:repackage

就可以在子项目cloud-eureka-server中执行。说明顶级项目聚合的子项目会跟着顶级项目一起打包

java -jar cloud-eureka-servertargetcloud-eureka-server-0.0.1-SNAPSHOT.jar
4. 后记

maven的继承:建立起子类找父类的联系
maven的聚合:建立起父类找子类的联系
所以,spring cloud 中的所有spring boot项目都被整合起来了。

另外,maven的许多实验需要用命令行验证,idea的启动夹杂了很多私货不利于研究maven原理。这里贴以下idea 启动的命令行

java.exe 
-Dmaven.multiModuleProjectDirectory=D:cloud 
-Dmaven.home=D:maven3.8 
-Dclassworlds.conf=D:maven3.8binm2.conf 
-Dmaven.ext.class.path=D:ideapluginsmavenlibmaven-event-listener.jar 
-javaagent:D:idealibidea_rt.jar=12953:D:ideabin 
-Dfile.encoding=UTF-8 
-classpath D:maven3.8bootplexus-classworlds-2.6.0.jar;D:maven3.8bootplexus-classworlds.license org.codehaus.classworlds.Launcher 
-Didea.version=2020.3.2 -s D:maven3.8confsettings.xml 
-Dmaven.repo.local=D:maven3.8local_repository package
4.1 普通 的应用。

如果微服务架构中的子微服务都是web应用,可以在开发者顶级的spring boot项目中定义。则所有微服务都可以省略写这个依赖。

    顶级的spring boot项目pom:
	
        
            org.springframework.boot
            spring-boot-starter-web
        
    
    子类的spring boot项目pom:
    不用写,自动继承
4.2 中的 的应用
    顶级的spring boot项目pom:
	
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                
                import
            
        
    
    子类的spring boot项目pom:
    写spring cloud 组件不需要制定版本号
    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
    
4.3 相同原理的衍生

指定所有项目单独打包使用spring boot插件。同样的,需要隔离的话用包住即可。

顶级的spring boot项目pom:

    
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704089.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号