ITPub博客

首页 > IT职业 > IT图书 > 微服务maven公共版本、私服、依赖管理

微服务maven公共版本、私服、依赖管理

IT图书 作者:zhjjj 时间:2021-09-09 08:53:41 0 删除 编辑

前言

关于微服务的公共依赖模块的抽取、统一版本管理、统一私服配置等,尝试了多种方案,整理优化了多次,分享一下。

期望达到的效果:

1、统一的三方库版本管理

2、统一的私服配置(上传、下载、下载插件)

3、springcloud springalibaba springboot 版本依赖管理统一配置

正文

单独建一个common的maven工程,内部生成一个core module。

核心就两块,一块是最外层的 common-parent(pom artifacId的名字),一块是内层的common

关系图

图片描述

common工程

common的功能:
  • 公共类、公共工具类
  • 公共三方依赖
  • 注意:common的packaging是jar
common-parent的功能:
  • 版本的统一管理
  • springboot springcloud springalibaba 版本管理
  • 私服的配置
  • 注意:common-parent的packaging是pom
外层的pom.xml

图片描述

4.0.0org.springframework.bootspring-boot-starter-parent2.2.8.RELEASEcom.xiaoxicommon-parent1.0-SNAPSHOTcommon-parentpomcore<!--  统一版本管理  -->3.4.03.3.23.8.78.0.132.0.71.18.125.3.81.81.4.02.2.1.RELEASE1.81.8Hoxton.SR62.2.1.RELEASE<!--  springcloud springAlibaba 依赖版本管理  -->org.springframework.cloudspring-cloud-dependenciespom${spring-cloud.version}importcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring-cloud-alibaba.version}pomimportio.seataseata-spring-boot-starter${seata.version}mysqlmysql-connector-java${mysql-connector.version}<!--拉取仓库-->maven_xiaoxihttp://192.168.148.237:8081/repository/maven-public/truealwaysalwaystrue<!--插件拉取仓库-->maven_xiaoxihttp://192.168.148.237:8081/repository/maven-public/alwaystruealwaystrue<!--发布仓库-->maven_xiaoxihttp://192.168.148.237:8081/repository/maven-releases/maven_xiaoxihttp://192.168.148.237:8081/repository/maven-snapshots/
复制代码
内层core的pom.xml

图片描述

common-parentcom.xiaoxi1.0-SNAPSHOT4.0.01.0-SNAPSHOTjarcommon<!--  公共依赖  -->mysqlmysql-connector-java${mysql-connector.version}org.springframework.bootspring-boot-starter-web2.2.8.RELEASEcom.baomidoumybatis-plus-boot-starter${mybatis-plus.version}com.baomidoudynamic-datasource-spring-boot-starter${dynamic-datasource.version}p6spyp6spy${p6sy.version}org.springframework.cloudspring-cloud-starter-openfeign2.2.3.RELEASEcom.github.xiaoyminknife4j-spring-boot-starter${knife4j.version}org.projectlomboklombok${lombok.version}cn.hutoolhutool-all${hutool.version}com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryhttpclientorg.apache.httpcomponents${nacos.version}<!--    seata    -->com.alibaba.cloudspring-cloud-alibaba-seata2.2.0.RELEASEio.seataseata-spring-boot-starterio.seataseata-spring-boot-starter${seata.version}redis.clientsjediscom.auth0java-jwt3.15.0com.alibaba.cloudspring-cloud-starter-alibaba-sentinel
复制代码

发布

每次发布,最好先clean,然后在最外层maven deploy即可。(因为他们是父子级关系)

微服务

图片描述

xxxx-interface

图片描述

com.xiaoxicommon-parent1.0-SNAPSHOTcom.example1.0-SNAPSHOT4.0.0test1-interfacecom.xiaoxicommon1.0-SNAPSHOTmaven_xiaoxihttp://192.168.148.237:8081/repository/maven-public/truealwaysalwaystrue
复制代码

可以看到,这里interface,是继承了common-parent,因为它是在私服上面的,所以无论如何你也需要配置一个私服的拉取仓库。但是好处是,你继承了common-parent,等于里面的 下载、插件下载、发布的配置都有了,就不必再配置发布了。

xxxx-service

图片描述

4.0.0com.xiaoxicommon-parent1.0-SNAPSHOTcom.exampletest1-service0.0.1-SNAPSHOTtest1-serviceDemo project for Spring Bootorg.springframework.bootspring-boot-starter-testtestcom.exampletest1-interface1.0-SNAPSHOT<!--  通过maven的profile来 动态修改spring的profile 达到多套配置切换使用的效果  --><!-- 本地环境 -->locallocaltruetrue<!-- 开发环境 -->devdevtruehttp://192.168.148.236:2375<!-- 测试环境 -->testtestfalsehttp://192.168.148.235:2375<!-- 生产环境 -->prodprodfalsehttp://xxxx:2375<!--  maven插件发布到docker中  --><!-- 引用我们的项目名字 -->${project.artifactId}org.springframework.bootspring-boot-maven-pluginmaven_xiaoxihttp://192.168.148.237:8081/repository/maven-public/truealwaysalwaystrue
复制代码

service,现在就清爽很多了。只需要继承common-parent,加上私服拉取,就可以节省很多配置了。依赖的话,只需要微服务模块间的 和 自己的 interface的依赖即可。

依赖关系为:

xxxx-service -> xxxx-interface -> common

继承关系为

xxx-interface -> common-parent

xxx-service -> common-parent

关于service想要自定义版本的实现

在整理优化的过程中发现一个问题,就是:

我们公共依赖里面配置的seata版本是1.4.0,而最终在service里面的版本是1.1.0。

这是为什么呢?这就跟maven的依赖加载顺序有关系了。

这里也简述一下:

我们大致把依赖分为这几个级别:

  • 本级

自身的工程的直接依赖

  • 上级

自身工程的parent继承

  • 下级

依赖的库的依赖 自身工程依赖的三方库 的 依赖

  • 版本管理

自身工程的版本管理

优先级顺序为:

本级 > 本级版本管理 > 上级 > 上级版本管理 > 下级 (无下级版本管理)

而对照我们的公共依赖库的话:

我们parent继承的common-parent的版本优先级是高于 依赖的第三方common的依赖的版本的

也就是说,common里面是1.4.0,而parent里面是1.1.0(springalibaba),此时最终就会以1.1.0为最优先。

下面是图

图片描述

那么这种情况怎么办呢?

我们知道maven的依赖如果是有多个相同的,那么后面的会覆盖前面的配置。

在我们common-parent的dependencyManagement里面已经定义了 springalibaba,那么我们就可以在下面重新指定一下 seata的版本为1.4.0,这样对于common-parent而言最终其实seata版本就是1.4.0了。

图片描述

对照加载顺序就是:

  • 原来:

本级(无) > 本级版本管理 (无) > 上级(无) > 上级版本管理 (common-parent 1.1.0)> 下级 (common 1.4.0) (无下级版本管理)

  • 现在:

本级(无) > 本级版本管理 (无) > 上级(无) > 上级版本管理 (common-parent 1.4.0)> 下级 (common 1.4.0)

作者:fly7632785
链接:https://juejin.cn/post/6955026060874350606
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/717/viewspace-2807266/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    231
  • 访问量
    1891