jar 包版本管理有感,想了解下大家是怎么样做的,以及这些遇到这些情况怎么处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ldyisbest
V2EX    程序员

jar 包版本管理有感,想了解下大家是怎么样做的,以及这些遇到这些情况怎么处理

  •  
  •   ldyisbest 2022-03-19 14:20:39 +08:00 4081 次点击
    这是一个创建于 1301 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的对接项目,刚开始对接的 A ,版本号是 1.0-snapshot ,然后对接 B ,版本号升级 1.1 ,后来又有新业务对接 A 的时候,A 说“这干嘛加版本号”,“每次你改我还得在改一下我的 pom 文件”,“上一次 XX 就是这样搞的 我的生产线上代码直接报错了”,“这东西最好不要改 要不然 每次都得沟通一下”,于是我作为一个实习生,就没有争辩,就把版本号改回去了,改成了 1.0-snapshot (之前他引用的版本),然后新业务对接 B ,给 B 说版本号是 1.0-snapshot ,B 说之前都升到 1.1 了怎么又改回去了,然后叨叨了一大堆。A, B 是一组的,B 是那个组的组长,还说什么版本号达成共识就行,自己一个组的人都没达成共识。

    问题:

    1. maven 版本号,大家公司的实践是怎么样的
    2. A 是啥意思,是纯粹的懒还是不升版本号确实不会出错,我的理解是不生版本号更容易出错且会更混乱,上家公司实习的时候大家都升版本号,也都没什么异议。
    3. 由于 A 不让升版本号,导致版本号回退,后来对接 B 的时候,导致 B 觉得是我们在瞎搞。 想请问大家面对 A 这样的开发的时候要怎么处理,我是实习生的身份,我当时的做法是妥协 A 。

    我为啥一直是实习生,本科大四的时候在一家几百人的公司实习,后来觉得没劲就考研了,再后来就在这家公司实习,这家公司是国企,开发大概 50 人左右

    29 条回复    2022-03-22 09:56:17 +08:00
    gexyuzz
        1
    gexyuzz  
       2022-03-19 14:34:08 +08:00
    mineralsalt
        2
    mineralsalt  
       2022-03-19 14:34:44 +08:00   7
    首先, 每次发版本, 版本号必须累加, 这是铁律. A 的问题让他自己去解决
    dayeye2006199
        3
    dayeye2006199  
       2022-03-19 15:11:12 +08:00 via Android   1
    这个公司没有 artifacts repository 的吗?
    多版本号共存应该也不影响使用才对,各个项目依赖不同版本是可以的。
    cppc
        4
    cppc  
       2022-03-19 18:35:57 +08:00 via iPhone
    A 的想法也正常,你维护的 lib 升级了新版,应该有一种机制让使用方知道改动了什么,升还是降自己看着办。从你的描述看应该是 B 有新需求导致升级,那这跟应该没关系才对,所以没理由让别人跟着升级
    passer9527
        5
    passer9527  
       2022-03-19 19:49:19 +08:00 via iPhone
    我们所有服务都是 1.0-snapshot ,全部统一。就为了避免楼主这种问题
    buliugu
        6
    buliugu  
       2022-03-19 23:30:08 +08:00
    开发用 SNAPSHOT,生产用 RELEASE ,RELEASE 必须升版本
    Lighfer
        7
    Lighfer  
       2022-03-19 23:30:20 +08:00
    我们的解决方案是使用远程依赖加载,开发环境下,非 API 层面的变动,依赖的提供方直接替换远程的版本即可,正式发布前则要求引用方必须更新版本号。
    Buges
        8
    Buges  
       2022-03-19 23:52:01 +08:00 via Android
    要看具体引用的方式。如果是引用某个固定的版本,发新版本自然按正常流程升级。如果是引用 git/devel/master 滚动版本,那才是每次都拉取最新 /主线版本。
    alexmy
        9
    alexmy  
       2022-03-20 00:48:42 +08:00
    A 用 1.0 ,B 用 1.1 。应该都有 maven 私库,都是共存的吧。
    ikas
        10
    ikas  
       2022-03-20 00:54:58 +08:00
    快照版本开发模式

    开发过程中使用 snapshot 版本,但是正式版本禁止使用 snapshot 版本

    比如你们需要开发 1.0 版本,那么开发过程选择 快照版本开发模式,那么版本就是选择 1.0-snapshot ,然后一直开发提交,中间也可以将 1.0-snapshot 推到自己的 maven 中央库,别人的项目也会拉取你这个最新的版本

    当你开发完成后,那么这时候就是将此时的 1.0-snapshot ,定为 1.1 或者 2.0 等等...

    当开始下一个版本时,就是 1.1-snapshot,2.0-snapshot,等等
    Niphor
        11
    Niphor  
       2022-03-20 11:49:30 +08:00
    我觉得这是人际关系的问题,和升不升一点关系都没有
    DinnyXu
        12
    DinnyXu  
       2022-03-20 11:55:28 +08:00
    我们现在一个项目有几十个微服务,关于版本相互依赖这件事,最好是有个私服仓库进行管理,一楼的是最标准的答案,也是我们目前实施的方案。

    A 的想法就是个错误的想法,你既然微服务 A 产生了代码变动,如果是小迭代升版本是应该的,而不是为了“偷懒”或者说改了要沟通什么的... 你升级版本,别人需要依赖你的微服务,自然就要把版本写成跟你一样的,我认为这是理所应当的,还有就是你 A 升级为 1.1 后,正常来说会有个 relase 版本在私服管理着的,这样 B 就不需要改动。

    最根本的原因还是你们没有私服管理....还有就是 A 太懒了....
    ldyisbest
        13
    ldyisbest  
    OP
       2022-03-20 17:09:34 +08:00
    @dayeye2006199 #3 artifacts repository 是什么,我们有 maven 的私服,微服务的 api 会打包部署到私服

    @cppc #4 都是微服务,我们的微服务有 api 和 service ,api 是打成 jar 提供给别人引用的,因为要新增加接口,于是就升级 api 的 jar 包的版本,但是 A 不愿意升级 jar 版本

    @passer9527 #5 我觉得不改 jar 版本是很混乱的,毕竟 maven 仓库设计的时候就带有版本号,比如要删除某些 API , 有些人还没迁移,那么那些人打包的时候就会报错

    @buliugu #6 我们没有区分,都是一个 maven 仓库,snapshot 和 release 也是混用

    @Lighfer #7 我修改的就是微服务的 API 层,新业务新增加了个接口,打 jar 包升级了版本号,所以我认为他应该引用新的版本号

    @Buges #8 是微服务的接口层,

    @alexmy #9 是的,新增加功能 A 也不愿意升版本,这样的话 每次增加需求 除了正常升级版本打一个包,还要打一个 1.0 的包(给 A 用,暂时是这样)

    @ikas #10 是的,但是 A 不愿意改他的 pom ,我觉得他认为这样需要沟通成本,并且可能会出错,代价比较高。

    @Niphor #11 是滴,说的太对了,我想问的就是这样该怎么处理, 我的情况是我是实习生(差不多可以算 2 年开发经验吧) 国企 几十人开发,所以我就无所谓他们怎么搞,他们说啥就是啥

    @DinnyXu #12 有私服仓库,但是没有规范约束如果使用,个人也觉得是 A 的问题。不过我没有计较,人家是好几年开发经验的正式工,而我只是实习生
    Lighfer
        14
    Lighfer  
       2022-03-20 17:14:11 +08:00
    @ldyisbest 如果是生产环境中已经在使用的 API ,不建议直接发生变化,有 BUG 内部处理,新功能必须改接口就新增一个,或者按版本号划分。生产环境中其他服务正在稳定使用的任何接口非必要不要动。
    即使是在开发环境,频繁发生 API 变更也会大幅降低团队的工作效率的。
    Lighfer
        15
    Lighfer  
       2022-03-20 17:16:12 +08:00
    这个问题无论用 snapshot 版还是远程加载或者其他的,你 API 一旦变了,别人的代码中如果有用到,就不得不跟着改,这对引用方来说就不是只改个版本号这么简单了
    ldyisbest
        16
    ldyisbest  
    OP
       2022-03-20 17:16:52 +08:00
    @Lighfer #14 是的,我同意你的看法,我的做法就是新增了一个接口,并且本身就是新业务 新增接口,并且增加了 api 层的 jar 的版本号。在这个情况下 A 也不愿意改他的 pom 文件
    ldyisbest
        17
    ldyisbest  
    OP
       2022-03-20 17:17:37 +08:00
    @Lighfer #15 我没有改任何已有的接口,使 A 需要改动他的代码
    Niphor
        18
    Niphor  
       2022-03-20 17:33:28 +08:00   1
    这种还是得看里面每个人的人际关系有没有摸清了,谁强硬、谁说话好使。然后动态都发部门群里...先当缩头乌龟。
    转正了你管他是谁,只要领导觉得你行就行了
    ldyisbest
        19
    ldyisbest  
    OP
       2022-03-20 17:40:30 +08:00
    @Niphor #18 国企要钱没钱,要技术没技术。不打算转正,6 月份准备跑路了,不找事还好说,现在谁刚我我刚谁。研究生全职实习月薪 3.5k ,干的活跟正式员工一样,前段时间还算绩效,连 3.5k 都发不到玩个毛
    ldyisbest
        20
    ldyisbest  
    OP
       2022-03-20 17:42:55 +08:00
    @Niphor #18 在多说一个事,A 之前私自改线上数据库( A 有线上权限,数据库的权限管理也很乱),几百万的表,增加一个字段,把线上应用卡崩溃了十来分钟。没过多久又私自改库,把线上应用卡崩溃了十来分钟。 实在是没眼看
    Niphor
        21
    Niphor  
       2022-03-20 17:44:25 +08:00
    所以其实 OP 心理其实早就想清楚了
    DinnyXu
        22
    DinnyXu  
       2022-03-20 21:16:05 +08:00
    @ldyisbest 那说到底还是你们的开发制度有很大的缺陷,没有人进行技术层面的管理。
    yoloMiss
        23
    yoloMiss  
       2022-03-20 21:48:30 +08:00
    这 还是开发流程有问题吧,snapshot 是作为开发版本或者测试版本发布的,既然两个系统对接那就不应该用这个版本号了。
    bthulu
        24
    bthulu  
       2022-03-21 08:35:54 +08:00
    不是有 maven 私服么, A 用他的 1.0-snapshot, B 用他的 1.1 不就好了
    ldyisbest
        25
    ldyisbest  
    OP
       2022-03-21 09:07:44 +08:00
    @DinnyXu #22 @yoloMiss #23 是的,开发制度有很大缺陷,没有人在技术层面管理。 并没有人在意用不用 snapshot
    @bthulu #24 这样也可以,就是在新加功能的时候要打两个版本的包
    zzfer
        26
    zzfer  
       2022-03-21 10:26:08 +08:00
    你的包应该像其他 maven 依赖一样,两个包的版本并存再你们的 maven 私库里
    bthulu
        27
    bthulu  
       2022-03-21 15:10:08 +08:00
    @ldyisbest 为啥新加功能要打两个版本的包? 1.0-snapshot 打包放到仓库里就不用管了, 后面加新功能, 只打 1.1 的就好了. 谁需要新功能, 谁自己去升级到新版本. 不需要新功能的就不用强制升级.
    ldyisbest
        28
    ldyisbest  
    OP
       2022-03-21 21:30:34 +08:00
    @zzfer 是的,现在就是这样搞

    @bthulu #27 就是 A 需要用新功能的,并且 A 不愿意升级版本。A 的版本是。1.0-snapshot
    zzfer
        29
    zzfer  
       2022-03-22 09:56:17 +08:00
    @ldyisbest 你没描述清楚,大家都以为是 A 不需要新功能,并且原来的 1.0 版本没有了。如果是 A 也需要新功能,你直接抽出身来,让 A 和 B 谈就行了,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5692 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 06:23 PVG 14:23 LAX 23:23 JFK 02:23
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86