如果我们在classpath中放置两个不同版本的jar文件会发生什么?

时间:2016-01-11 18:46:05

标签: java tomcat java-ee

如果我在类路径中放入两个不同版本的jar文件,会发生什么? 例如: item.ToString()保留在课程路径中 会发生什么?

3 个答案:

答案 0 :(得分:13)

虽然我也建议不要这样做,但我仍然想尝试回答你原来的问题:

Java具有类加载器层次结构,因此如果在层次结构的不同级别中同时存在两个JAR,则类加载器会定义其优先级。最常见的示例是Web应用程序类加载器层次结构(例如Tomcat),其中应用程序类的优先级高于容器类(如果两者都适用)。

如果两个JAR位于同一个类加载器(同一级别)中,则文件系统确定顺序,这从开发人员的角度来看是不可靠的,因此请将其视为随机。只有一个加载,但你不知道哪个,甚至可能不会从依赖问题中得到错误。如果遇到依赖性问题,它们可能是java.lang.Errors,例如VerifyError,NoClassDefFoundError,NoSuchMethodError。

答案 1 :(得分:1)

可能发生以下两种情况之一 - 您可以获得版本1.4,或者您可以获得1.5。

这不推荐使用,可能会导致问题,特别是如果您使用两个版本相距很远但API略有不同,可能会导致编译问题

答案 2 :(得分:1)

简短回答你不想这样做

根据您使用JAR提供的类的方式,您可以有明确的异常或奇怪的行为。