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

Nar*_*esh 9 java tomcat java-ee

如果我在类路径中放置两个不同版本的jar文件,会发生什么?
例如: log4j1.4.jar and log4j1.5.jar保持在classpath
会发生什么?

小智 14

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

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

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

  • 这是一个很好的答案,除了它给作为储存容器的罐子提供了很多信用 - 它关于罐子里面的类和包装.如果两个jar都定义完全相同的完全限定类名,则只会发生冲突.JVM肯定会加载两个jar - 但它不会加载已经加载的类. (2认同)