背景:
在项目中需要使用一个表达式引擎,然后选用了使用Aviator,由于项目中已经引入了hutool的,干脆使用hutool分装好的API,所以引入了 包路径为: cn.hutool.extra.expression.ExpressionEngine的接口,这个接口是hutool对各类引擎的一个门面,我们引入的hutool依赖版本是:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
ExpressionEngine接口中有一个方法是eval,作用我们先不管。从引入后这个函数的参数一直都是两个的
然后我们就正常的使用,开发期间也没发生什么问题。
出现问题:
直到有一天,我修改了一些功能后,正常构建到jenkins,突然报错了:
这什么玩意?我看这报错的文件我也没动过呀,怎么会好端端的出错了,关键我前两个小时还成功构建了,就过了一个中午,代码就罢工了?
仔细查看报错内容,说的是实际上eval这个函数接收的是三个参数,实际上只传了两个。我立马去看了项目中的源码,发现这个是两个参数没问题啊,十分离谱啊。
排查过程
先去问了运维,是不是懂了构建那边的配置,运维说没有动过。
那就奇怪了,这个三个参数是怎么突然出现的,就算hutool发布了新版本增加了一个参数,按理说也不会影响到我当前的版本吧。。。
然后我就去hutool的源码仓库看了这个接口,结果发现tmd这个eval函数在2023年6月在版本5.8.20就改了。。。 而我们这个模块是24年5月创建的,使用的版本还是5.8.25
那么问题就来了,我使用的版本远远高于修复的版本,为什么包中源码确实修复之前的代码,而且我开发了这么久使用两个参数也一直是正常的,怎么今天突然就好端端报错了呢? 然后我刷新了一下maven,包中的源码就变成了三个参数了,我使用的那行代码也出现了报红,就很离谱好吧。。。。
总结
在使用了更高版本的hutool,但是本地引用的包中这个接口的代码还是几个版本前的,使用了一个多月都正常,今天突然报错,刷新maven后代码更新了,需要修改参数。目前还没找到是什么原因。