如果我在類路徑中放入兩個不同版本的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 –