首页 > IT职业 > IT图书 > 微服务maven公共版本、私服、依赖管理
关于微服务的公共依赖模块的抽取、统一版本管理、统一私服配置等,尝试了多种方案,整理优化了多次,分享一下。
1、统一的三方库版本管理
2、统一的私服配置(上传、下载、下载插件)
3、springcloud springalibaba springboot 版本依赖管理统一配置
单独建一个common的maven工程,内部生成一个core module。
核心就两块,一块是最外层的 common-parent(pom artifacId的名字),一块是内层的common


4.0.0 org.springframework.boot spring-boot-starter-parent 2.2.8.RELEASE com.xiaoxi common-parent 1.0-SNAPSHOT common-parent pom core <!-- 统一版本管理 -->3.4.0 3.3.2 3.8.7 8.0.13 2.0.7 1.18.12 5.3.8 1.8 1.4.0 2.2.1.RELEASE 1.8 1.8 Hoxton.SR6 2.2.1.RELEASE <!-- springcloud springAlibaba 依赖版本管理 -->org.springframework.cloud spring-cloud-dependencies pom ${spring-cloud.version} import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import io.seata seata-spring-boot-starter ${seata.version} mysql mysql-connector-java ${mysql-connector.version} <!--拉取仓库-->maven_xiaoxi http://192.168.148.237:8081/repository/maven-public/ true always always true <!--插件拉取仓库-->maven_xiaoxi http://192.168.148.237:8081/repository/maven-public/ always true always true <!--发布仓库-->maven_xiaoxi http://192.168.148.237:8081/repository/maven-releases/ maven_xiaoxi http://192.168.148.237:8081/repository/maven-snapshots/
复制代码

common-parent com.xiaoxi 1.0-SNAPSHOT 4.0.0 1.0-SNAPSHOT jar common <!-- 公共依赖 -->mysql mysql-connector-java ${mysql-connector.version} org.springframework.boot spring-boot-starter-web 2.2.8.RELEASE com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} com.baomidou dynamic-datasource-spring-boot-starter ${dynamic-datasource.version} p6spy p6spy ${p6sy.version} org.springframework.cloud spring-cloud-starter-openfeign 2.2.3.RELEASE com.github.xiaoymin knife4j-spring-boot-starter ${knife4j.version} org.projectlombok lombok ${lombok.version} cn.hutool hutool-all ${hutool.version} com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery httpclient org.apache.httpcomponents ${nacos.version} <!-- seata -->com.alibaba.cloud spring-cloud-alibaba-seata 2.2.0.RELEASE io.seata seata-spring-boot-starter io.seata seata-spring-boot-starter ${seata.version} redis.clients jedis com.auth0 java-jwt 3.15.0 com.alibaba.cloud spring-cloud-starter-alibaba-sentinel
复制代码
每次发布,最好先clean,然后在最外层maven deploy即可。(因为他们是父子级关系)


com.xiaoxi common-parent 1.0-SNAPSHOT com.example 1.0-SNAPSHOT 4.0.0 test1-interface com.xiaoxi common 1.0-SNAPSHOT maven_xiaoxi http://192.168.148.237:8081/repository/maven-public/ true always always true
复制代码
可以看到,这里interface,是继承了common-parent,因为它是在私服上面的,所以无论如何你也需要配置一个私服的拉取仓库。但是好处是,你继承了common-parent,等于里面的 下载、插件下载、发布的配置都有了,就不必再配置发布了。

4.0.0 com.xiaoxi common-parent 1.0-SNAPSHOT com.example test1-service 0.0.1-SNAPSHOT test1-service Demo project for Spring Boot org.springframework.boot spring-boot-starter-test test com.example test1-interface 1.0-SNAPSHOT <!-- 通过maven的profile来 动态修改spring的profile 达到多套配置切换使用的效果 --><!-- 本地环境 -->local local true true <!-- 开发环境 -->dev dev true http://192.168.148.236:2375 <!-- 测试环境 -->test test false http://192.168.148.235:2375 <!-- 生产环境 -->prod prod false http://xxxx:2375 <!-- maven插件发布到docker中 --><!-- 引用我们的项目名字 -->${project.artifactId} org.springframework.boot spring-boot-maven-plugin maven_xiaoxi http://192.168.148.237:8081/repository/maven-public/ true always always true
复制代码
service,现在就清爽很多了。只需要继承common-parent,加上私服拉取,就可以节省很多配置了。依赖的话,只需要微服务模块间的 和 自己的 interface的依赖即可。
xxxx-service -> xxxx-interface -> common
xxx-interface -> common-parent
xxx-service -> common-parent
在整理优化的过程中发现一个问题,就是:
我们公共依赖里面配置的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/ ,如需转载,请注明出处,否则将追究法律责任。