Maven Transitive Dependency导致NoClassDefFound错误

时间:2016-01-07 18:31:28

标签: maven transitive-dependency

我在尝试加载似乎是由于依赖版本冲突而导致的类时遇到 NoClassDefFoundError

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

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

,而

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

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