在詹金斯共享库中使用外部jar的问题

时间:2018-10-23 16:28:18

标签: jenkins jenkins-pipeline jenkins-shared-libraries

我们正在使用Jenkins共享库来集中所有(脚本化)管道的代码。现在,我们将一些Groovy代码分解到.jar库中(以Kotlin编写,已编译为与Java 8兼容)。我们已将此库发布到我们的内部Maven存储库中,现在想在共享库中使用它。

我们正在使用@Grab来加载我们的库,直到这一点它都像一种魅力。但是,我们得到了NoSuchMethodError。我们将其精确定位,我们在Kotlin库中使用OkHttp。 OkHttp在内部使用Okio。当我们从管道中调用内部调用OkHttp-Code的方法时,一切都很好。但是,当OkHttp代码在内部调用Okio时,我们得到一个NoSuchMethodError

我们已经检查了已发布的.jar文件,它包含带有似乎缺少方法的类。有人知道这个问题可能是什么吗?

在此过程中,我们无法访问Kotlin库中Jenkins上设置的环境变量,有什么方法可以解决此问题?

2 个答案:

答案 0 :(得分:0)

在这里查看依赖项会遇到一些问题:

  1. OKHttp-似乎需要一些Android库
  2. okio-取决于Kotlin运行时

任何对它们的调用都会导致方法未找到错误,除非您找到一种在不引起詹金斯问题的情况下使它们可用的方法

答案 1 :(得分:0)

我们知道了。问题是,Jenkins插件在内部使用了okio的旧版本。因为插件和共享库以某种方式共享相同的类路径,所以okio没有被加载,插件的版本被使用,因此该类不存在。

我们通过重新打包.jar中的所有依赖项来解决此问题,因此程序包名称不会受到干扰,并且可以确保使用了指定的依赖项。