大家好,我3y啊。本来我以为我平时在公司乱写代码,已经是一件很过分的事了。这两天遇到的问题,我觉得是真在代码里下毒,决定下班就回家写篇文章一吐不快。
不知道大家有没有听过「二方库」,首先来科普一下什么是二方库?
我想象中的二方库:
OK,有了二方库的基础了以后,来介绍下我这两天遇到的奇葩事了。我这项目被maven管理,有十几个模块,其中xxx-common
是一个二方库,xxx-service
是主要的业务逻辑代码,这个项目都在同一个Git仓库下做代码版本控制。
最近因为调用外部接口的api要升级了,而外部接口的api的url是写在二方库xxx-common
模块上。这本身是很合理的事,其他需要用到这个外部api的模块就不用在自己的系统上定义对应的url咯。
像这次升级的话,那只要改一处就好了,其他的模块只要引入新的二方库版本就OK咯,这很合理。
然而,我发现这个url被复制到处都是,一改就改了好几个模块。就比如像xxx-service
模块明明就有引入xxx-common
模块,但它还是单独在系统上声明了url。
不过,这不是事,改起来很方便,现在ide太强大了,直接全局匹配出来,全局替换就完事了。
但是,为了后续好维护,我是想统一把这块抽取到xxx-common
模块就可以了,后面就真的只改一处。然而,我发现了个事,各个模块依赖xxx-common
的版本都不太一样。
比如xxx-service
依赖的xxx-common
是0.0.1
版本,而xxx-service-v2
依赖的xxx-common
是0.0.3
版本,我隐约感觉到不对劲了,但我还是继续往下干。
显然,我肯定是基于现有xxx-common
最新的版本的基础上去做改动的咯。整个项目的git仓库用的是master分支,我就理所当然地在master分支上修改xxx-common
模块。
很快啊,我改完了,我把xxx-service
依赖的xxx-common
,升级到我新发的版本之后,发现项目压根就部署不起来。我一想,没理由啊,我就改了这么点东西,凭啥没有起来啊。就只是一个变量啊,大哥!
看了半天,哦,原来xxx-common
这个模块不是在master分支上改的,是由另外的分支去变更它的代码。你能理解吗,我是理解不了,你这样玩,你为啥在同一个Git仓库下管理啊!!!
这我忍了,我就切到对应的分支上去改吧。找出问题了以后,这也很快啊,我一会就搞掂了,于是我又重新打了个新的版本deploy在maven的仓库上,把xxx-service
模块又重新部署起来。
阿欧,发现xxx-service
模块又没起来,缺了别的java依赖。我又再次核对了下,分支是没错的,版本也是在xxx-service
之前的所依赖的版本基础上改的,改动也就一个变量,这凭啥没起来啊!
怎么想都不对劲,后来我就去把我打的jar包跟上一个版本的jar包做了下对比(idea可以对比两个jar包的区别,又学到了些知识了)。
我发现,这差异不仅仅是我改的变量啊,还有好十几个类啊。这怎么解释呢?我能想到唯一的解释就是:上一个人把包发布到maven了,但是没有提交&推送(commint&push)代码
擦,这么狠毒啊!这怎么玩啊,花了我两天时间搞这个了,正常的需求我都还没做啊。原来可以这样在代码里下毒啊。
END