java - 实在受不了了,问一个maven父pom的版本更新问题!

查看:128
本文介绍了java - 实在受不了了,问一个maven父pom的版本更新问题!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

由于新项目使用为微服务的架构,所以为了方便版本的管理
独立了一个pom的父项目,存储公用的properties,和各个服务对应的版本。
项目使用的是dubbo做soa
例如我的项目叫xbx
那么项目的结构就是
xbx-parent
xbx-facade-user //存放接口
xbx-service-user //提供服务

那么parent的pom里面就有

<groupId>com.xbx</groupId>
<artifactId>xbx-parent</artifactId>
<version>0.0.1</version>
<packing>pom</packing>

<properties>
    <xbx-facade-user.version>0.0.1</xbx-facade-user.version>
    <!--等等其他很多依赖-->
</properties>

那么问题来了,当我xbx-facade-user更新的时候,对应的parent中的properties需要更新,parent的版本就需要更新。

那么!所有依赖这个parent的项目都需要更新!!!
十分麻烦!!!
有什么简便的方法吗!!!

已经尝试的方法有
1、在父项目使用properties标识父项目的版本

结论: 不可行,在私有库中如果用properties的话properties不是要从parent里面继承才方便吗?但是properties在parent的话我怎么定位是哪一个版本的parent呢

2、使用mvn versions批量更新

结论: 不可行,为什么呢?因为这个方式貌似只适合有层级结构的项目,例如
Project
--SubProject1
  --pom.xml
--SubProject2
  --pom.xml
pom.xml

我想一定有其他办法的,各位大神行行好告诉我呗(感谢感谢)

解决方案

基本理解题主的意思了,如果你是开发阶段,大家都用snapshot版本好了,永远只拿最新开发版本,等到稳定了,就用版本号,但理论上这个版本号的升级不会太频繁,等到下一个开发阶段,继续用snapshot然后稳定版本号。以此循环下去,这才是maven开发的逻辑

另外你每个项目的版本号没必要写在一个共有的地方,比如A它用的是B的1.0,现在B升级到1.1了,A可不一定要跟进这个升级的,因为A相应的改动可能没准备好。你写在一个共有的地方,大家一升都升相当不灵活。每个服务维护自己依赖库的版本就好

题外话:这个不叫微服务,说到底还是传统的多module开发,只不过互相之间的调用是走远程的而已。每个服务有两份东西,一个服务端,一个库,库是给其他要依赖这个服务的服务们用的。但这个库会不时的更新,导致其他依赖的服务也需要不停的更新,重新编译和发布。

真正的微服务,理论应该一个服务一个repo,没有库这种文件上的依赖,互相之间的调用走纯的RESTful API。也就是说服务之间的依赖仅仅是一纸契约,而这个契约的改动是很不频繁的。例如服务A、B,B依赖A。A是不需要提供库的,当B需要使用A的接口时,它可以直接调用RESTful API,也可以把这个REST API封装成某个库,但这也只是发生在A这一测。这样的好处是:

  • 只要B提供的服务契约不变,即便内部实现改变,A也无需改变

  • A和B完全可以独立开发,用不一样的语言不一样的框架等等

回到题主这个问题,其实归根到底是dubbo造成的,dubbo这种就不是真正意义上的微服务,服务与服务之间存在代码依赖,绑的很死。所以dandang扩展的dubbox一个主要改变就是支持REST,把这种代码级别的依赖打破。

这篇关于java - 实在受不了了,问一个maven父pom的版本更新问题!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆