如何使用同一个依赖包的两个不同版本?



我正在使用一个用java编写的应用程序使用okhttp [version:3.14.9]的用例,我还导入了一些使用okhttp [version:4.10.0]的外部依赖关系,这是用Kotlin编写的,外部依赖关系使用的是okhttp(4.10.0)的方法,而不是在okhttp(3.14.9)。由于我的应用程序在运行时调用(3.14.9)依赖的方法,因此无法找到该方法并抛出java.lang.NoSuchMethodError.

我知道这是一个非常普遍的问题,每个其他java应用程序在某个时候都会遇到这个问题。所以我想知道大多数java应用程序广泛使用的正确方法。

这个问题没有合适的解决办法。您只能选择一个版本。

解决这个问题的方法是使用OSGi,但这将需要对应用程序进行重大的重新设计。

这是一个典型的问题,在运行时有多个版本的依赖项可用。我建议您提升应用程序中的okHttp版本,以匹配外部依赖项的版本。这将消除许多令人头疼的问题,比如"类路径解析"。问题。

如果您使用的是像Maven这样的构建工具,可能还有另一种解决方案,您可以使用定义3.14.9v作为编译时依赖项,并将4.10.0v包含为运行时依赖项,这样在运行时期间只有4.10.0v被打包并可用。

我会尝试将我的代码从3.14升级到4.10以匹配外部依赖。一般来说,只要你能升级包,这是件好事,所以这应该是一件好事(除非你有很强的理由不能这么做)。更糟糕的情况是,外部依赖迫使你降级,这令人沮丧,但有时是不可避免的。

最新更新