1

我在尝试加载一个似乎是由于依赖版本冲突的类时收到NoClassDefFoundError 。

项目 A -> 项目 B -> 项目 C。

我们在项目 A 中包含了项目 C 的 2.0 版。

然而

项目 B 需要项目 C 的 1.0 版。

现在,当项目 B 代码尝试从项目 C 加载类时,它会获得 2.0 版。

有没有办法,如果项目 B 尝试这样做,我可以明确定义引用项目 C (版本 1.0 ),并且在所有其他情况下它应该选择版本 2.0

我的意思是我们可以排除传递依赖的方式,有没有办法明确定义包含(仅用于各个项目的引用,而不是整个应用程序代码)。

谢谢。

4

1 回答 1

0

我严重怀疑这一点。如果我正确理解了这个问题,您的构建将导致同时将两个不同版本的项目 C 的 jar 加载到 JVM 中(一个用于项目 B,一个用于项目 A)。由于它们可能共享相同的包和类名,JVM 无法区分它们。

如果项目 C 是您自己的项目并且从版本 1.0 到 2.0 的更改破坏了某些东西,我会考虑使用新的包名称,例如 org.example.c2 而不是 org.example.c(例如在 Apache commons-lang项目)。

于 2016-01-19T16:07:50.613 回答