我们正在使用Jenkins共享库来集中所有(脚本化)管道的代码。现在,我们将一些Groovy代码分解到.jar
库中(以Kotlin编写,已编译为与Java 8兼容)。我们已将此库发布到我们的内部Maven存储库中,现在想在共享库中使用它。
我们正在使用@Grab
来加载我们的库,直到这一点它都像一种魅力。但是,我们得到了NoSuchMethodError
。我们将其精确定位,我们在Kotlin库中使用OkHttp。 OkHttp在内部使用Okio。当我们从管道中调用内部调用OkHttp-Code的方法时,一切都很好。但是,当OkHttp代码在内部调用Okio时,我们得到一个NoSuchMethodError
。
我们已经检查了已发布的.jar
文件,它包含带有似乎缺少方法的类。有人知道这个问题可能是什么吗?
在此过程中,我们无法访问Kotlin库中Jenkins上设置的环境变量,有什么方法可以解决此问题?
答案 0 :(得分:0)
在这里查看依赖项会遇到一些问题:
任何对它们的调用都会导致方法未找到错误,除非您找到一种在不引起詹金斯问题的情况下使它们可用的方法
答案 1 :(得分:0)
我们知道了。问题是,Jenkins插件在内部使用了okio
的旧版本。因为插件和共享库以某种方式共享相同的类路径,所以okio
没有被加载,插件的版本被使用,因此该类不存在。
我们通过重新打包.jar
中的所有依赖项来解决此问题,因此程序包名称不会受到干扰,并且可以确保使用了指定的依赖项。