0

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

我们正在使用@Grab加载我们的库,直到那时它就像一个魅力。然而,我们得到了NoSuchMethodError。我们确定了一点,我们在 Kotlin 库中使用了 OkHttp。OkHttp 内部使用 Okio。当我们从管道调用内部调用 OkHttp-Code 的方法时,一切都很好。然而,当 OkHttp-Code 在内部调用 Okio 时,我们得到一个NoSuchMethodError.

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

当我们这样做时,我们无法访问在 Kotlin 库中设置在 Jenkins 上的环境变量,有没有办法解决这个问题?

4

2 回答 2

1

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

我们通过重新打包我们的所有依赖项来解决这个问题.jar,所以包名不会干扰,我们可以确保我们指定的依赖项正在被使用。

于 2018-11-06T15:32:11.470 回答
0

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

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

对这些的任何调用都将导致方法未找到错误,除非您找到一种方法使它们可用而不会在 Jenkins 中引起问题

于 2018-10-23T19:18:21.293 回答