我想深入了解Java如何处理Classes/Packages /等的不同版本,但无法找到任何资源或至少是Google的最佳方式。问题如下。Java包版本 - 正确解决问题
想象一下,我们有一些外部包com.external.package
,其中包含SomeInterface
的定义。
现在我写一个java类MyClass
,它实现了SomeInterface
,并使用com.external.package v1.0.0
。接下来我打包一个包含MyClass
的(精益)罐子。
现在我将此jar插入另一个程序中,该程序正在寻找SomeInterface
的实现,但在它的依赖关系中,它使用的是com.external.package v2.0.0
。
是我得到的原因Failed to find any class that implements SomeInterface
SomeInterface
的版本在程序和包含扩展它的类的jar中不匹配?
基本上我想找到一个答案的问题是什么信息做瓶子存储关于外部依赖关系?它是否存储了它们的确切版本,如果它们在运行时不匹配,它会抱怨?但为什么它甚至允许运行引用相同的依赖项,但不同版本的程序?
Java的东西有没有“包版本” –
的概念,您能给一个更广泛的解释回答我的问题? – eddyP23
类和包没有版本。你得到这个“无法找到任何实现SomeInterface的类”的原因对我们来说是未知的,因为我们不知道你的代码在做什么,这看起来不像标准的编译器/运行时错误。所以它必须来自您的代码或来自您正在使用的库之一。 –