什麼是classpath地獄,是/它真的是Java的問題?什麼是classpath地獄,是/它真的是Java的問題?
回答
類路徑地獄是由Java執行的那種動態鏈接的不幸後果。
你的程序是不是一個固定的實體,而是由JVM在特定情況下加載的類的確切集合。
這是非常可能是在情況下會導致因解析規則完全不同的結果在不同的平臺,甚至在同一個相同的命令行。
標準庫可能存在差異(很常見)。圖書館可以彼此隱藏(舊版本甚至可以用來代替新版本)。目錄結構可能會解決問題。同一類的不同版本可能會出現在多個庫中,並且將會使用遇到的第一個類,等等。由於Java按規範使用了首次遇到的策略,所以未知的排序依賴性可能會導致問題。當然,由於這是命令行,它是規範的一部分,所以沒有真正的警告。
這仍然是一個問題。例如,在Mac OS上,來自蘋果的可怕支持意味着你的機器最終會有幾個JVM和幾個JRE,而且你永遠不會輕易地將東西從一個地方放到另一個地方。如果您有被編譯其他庫的具體的,但不同版本的多個庫,你coulld有問題,等
不過,這個問題是不是在Java中所固有的。在90年代編程時,我記得我分享的DLL地獄情況。任何情況下,你必須依靠文件系統中的某些東西來組裝你的程序,而不是有一個定義好的可執行文件,這是一個問題。
然而,這種模式的好處還是很大的,所以我願意忍受這種地獄。在Sun一側也有正確的方向。例如,Java6允許您簡單地用jar指定一個目錄,而不必枚舉它們。
BTW:類路徑也是一個問題,如果你使用的是使用非默認的類加載器的環境。例如,我在Eclipse下運行諸如Hibernate或Digester之類的問題,因爲類加載器不兼容。
有很多好東西在這裏http://mindprod.com/jgloss/classpath.html和http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html
我只有用的問題時,我不就是我自己使用-cp設置類路徑。試圖弄清楚你的第三方軟件如何設置他們的類路徑有時會很麻煩。
我覺得「類路徑地獄」是指當一個Java應用程序的類路徑中只能使用CLASSPATH環境變量設置的時間。這導致許多應用程序需要更改全局系統配置(每個操作系統都不同),應用程序之間的版本衝突以及一般混淆。
的Classpath /罐地獄有幾個逃生艙的,如果他們對你的項目意義:
- OSGi
- JarJarLinks
- NetBeans Module System - 不知道這是NetBeans的 的可用外
- 其他?
這是一個較爲具體的例子:
當兩個庫(或庫 和應用)需要不同的版本相同的第三 庫。如果第三個庫的兩個版本都使用相同的類 名稱,則無法將同一個類加載器的第三個庫的兩個版本都加載到 。
欲瞭解更多示例,請參閱http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell。
- 1. 什麼是Java Classpath和Path?
- 2. 「java -classpath。:」是什麼意思?
- 3. 它是視口問題還是什麼?
- 4. 什麼是C++中的回調地獄,爲什麼它會泄漏內存?
- 5. CLASSPATH內的值的順序是什麼?
- 6. 我的plist文件有問題嗎?但是它是什麼?
- 7. 什麼是eclipse的.classpath輸出?
- 8. 邏輯地址是什麼意思,它們是什麼樣的?
- 9. java threadlocal singleton - 它是什麼?
- 10. 現代Java。它是什麼?
- 11. 爲什麼輸出1?是因爲它是真的嗎?
- 12. 爲什麼總是發現它們都是真的?
- 13. 什麼是真正的pymc
- 14. 爲什麼e.AcceptSocket.ReceiveAsync是真的
- 15. 真正的1NF是什麼?
- 16. 真正的PNG是什麼?
- 17. 爲什麼WHERE「」=「」是真的?
- 18. 什麼是launchMode真的?
- 19. 什麼是「null:false」真的嗎?
- 20. Java Classpath問題
- 21. 這個bash腳本是做什麼的,它有什麼問題?
- 22. 什麼是在EAR的清單文件的classpath的目的是什麼?
- 23. java --classpath是否覆蓋CLASSPATH或追加到它?
- 24. CSS訂單問題 - 真正的邏輯是什麼?
- 25. 我們是否在java平臺上類似於dll地獄的jar地獄?
- 26. PHP肥皂是地獄
- 27. 什麼是問題? Yii2 elasticsearch
- 28. 什麼是NP問題?
- 29. 什麼是「表達問題」?
- 30. 什麼是ICS問題
我認爲它是http://en.wikipedia.org/wiki/Classloader#JAR_hell – 2008-12-16 23:49:32