如果我在类路径中放入两个不同版本的jar文件,会发生什么?
例如: log4j1.4.jar and log4j1.5.jar
保存在类路径中
会发生什么情况?如果我们将两个不同版本的jar文件放在classpath中会发生什么?
2
A
回答
6
虽然我也建议不要这样做,我还是喜欢尝试回答你原来的问题:
Java有一个类加载器的层次结构,因此,如果您在不同级别层次,类加载器定义了JAR文件其优越性。最受欢迎的示例是Web应用程序类加载器层次结构(例如Tomcat),其中应用程序类具有比comtainer类更高的优先级(如果两者都适用)。
如果您将两个JAR放在同一个类加载器(相同级别)中,则文件系统将确定从开发人员的角度来看不可靠的顺序,因此请认为它是随机的。只有一个加载,但你不知道哪个,并且可能甚至不会从依赖性问题中得到错误。如果你得到依赖问题,它们可能是java.lang.Errors,比如VerifyError,NoClassDefFoundError,NoSuchMethodError。
+0
它是一个很好的答案,除了它对罐子只是存储容器 - 罐子内部的类和包装提供了很多功劳。如果两个jar都定义了完全相同的完全限定的类名,则只会有冲突。 JVM绝对会加载这两个jar,但它不会加载已加载的类。 – Gimby
0
可能发生的两件事之一 - 你可以得到1.4版,或者你可以得到1.5。
不建议这样做,特别是如果你使用的是两个版本,其相距很远略有不同的API,可能会导致编译问题
1
简短的回答可能导致问题是你不想这样做。
根据您使用JAR提供的类的方式,您可以有明确的异常或奇怪的行为。
相关问题
- 1. classpath中的不同编译版本的jar文件
- 2. 如果我将相同的文件提交到两个不同的存储库,会发生什么
- 3. 如果我们不进行软件测试会发生什么
- 4. 将Jar文件放入ClassPath中
- 5. open()如果我oppen两次相同的文件会发生什么?
- 6. PHP - 如果我得到两个相同的会话ID会发生什么?
- 7. 如果程序将在运行时替换jar文件会发生什么?
- 8. 如果我在XCODE中重命名文件会发生什么?
- 9. 如果我们不取消注册BroadcastReceiver会发生什么?
- 10. 如果两个不同的程序试图同时写入同一个文件,会发生什么?
- 11. 为什么jar-MANIFEST文件中的规范版本有两个版本?
- 12. 如果两个python脚本想要在同一个文件中写入,会发生什么?
- 13. php如果两个人同时追加会发生什么?
- 14. 如果两个人同时提交编辑,会发生什么
- 15. 当我们关闭脚本两次时会发生什么?
- 16. 会发生什么,如果我用一种风格的API版本不支持
- 17. 如果我将索引放在表中的每一列上,会发生什么
- 18. 需要用于不同类的jar文件的两个版本
- 19. Java:不同版本的多语言包会发生什么?
- 20. 如何将jar放入Eclipse的classpath中?
- 21. 如果我把不可用的值放在JavaScript变量中会发生什么?
- 22. 如果我们不在Java中序列化对象会发生什么?
- 23. 如果我们不在init方法中检查“if(self)”会发生什么?
- 24. 如果我没有将所有C *主机放在DevCenter中会发生什么?
- 25. 如果我在头文件中实现了一个类会发生什么?
- 26. 如果我在不同布局的多个小部件中使用相同的id,会发生什么情况?
- 27. 如果我们直接调用run方法会发生什么?
- 28. 如果我们多次合并相同的变更集会发生什么? - TFS
- 29. 这两个实现为什么会产生不同的结果?
- 30. 当我读/写同一个文件时会发生什么?
什么阻止你自己尝试并发现? – redFIVE
可以通过使用网站搜索来回答:http://stackoverflow.com/questions/6105124/java-classpath-classloading-multiple-versions-of-the-same-jar-project –