java.Lang.LinkageError 錯誤產生的原理分析


java.Lang.LinkageError 這個異常在使用多ClassLoader的應用程序時常常會遇到,但是具體它是怎么產生的,很少人能夠回答上來,於是上來來一發。

描述一下碰到這個異常的場景:應用A中使用了自定義的classLoader來加載所屬應用的多個插件,以便能使各插件包達到類隔離的效果,每個插件都依賴了應用A中提供的一個依賴包M,這個依賴包在應用A中是有加載的,一般情況下,只要組件的依賴中打包時去除掉這個依賴包M,就不會有問題。但是實際的操作中,有的插件開發者經常會有意無意的將排除這個事情忘記。當把包含了依賴包M的插件發布到應用A中時,就可能出現這個異常。提示:java.lang.LinkageError.

這個錯誤發生的原因是同一個限定名的class類被多個不同的ClassLoader加載后,相互交叉使用導致的類沖突的情況。同一個限定名的class在不同的classLoader中屬於不同的 Class實例,而JVM在加載某一個類時,需要加載所有import進入的Class,這種情況下,如果自定義的classLoader中存在與parentClassLoader需要加載相同限定名的Class時,就會拋出java.Lang.LinkageError.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM