Re: [問題] 為何不是import rt.java.lang.*

看板java作者 (null)時間15年前 (2010/11/14 21:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《qrtt1 (null)》之銘言: : A/ : com/ : qty/ : A.class : B/ : com/ : qty/ : B.class : C.class : Foo.jar/ : com/ : qty/ : D.class : A.class 在這個例子,我故意外了一個 com.qty.A 在 Foo.jar 這對預設的 classloader 來說,會造成意外的效果。 順便介紹這就是 class shadow 的問題。 因為預設的 classloader 只要找到 class 就不會繼續再找其他路徑了 當你的 A/com.qty.A 與 Foo.jar/com.qty.A 是不同版本的時候 在執行時就會發生一些不可預期的效果, 像是找不到對的 method 或是 method 參數對不上。 使用預設的 classloader 時, 當 CLASSPATH 的順序為 A 在 Foo.jar 之前 那麼就會優先使用 A/com.qty.A 當順序相反,Foo.jar 在 A 之前時 那麼就會優先使用 Foo.jar/com.qty.A 這種情況不只是會發生在類別, 透過 classloader 存取的設定檔,也會遭受影響 因為他們通常都在同樣的 default package (也就是/) 想要附帶提出這個"特性", 是因為看到新的 Eclipse 直接提供 fatjar 的功能會產生的效果 當您把所有 .jar 都合併在一起後,這種名稱遮蔽的衝突效果就會更容易出現 zip 格式可以容忍同樣的路徑。 全都壓縮在一起後,您就無法簡單透過修改 CLASSPATH 的順序來避免這個問題 PS. 若維護一些新版本版 library 混合的專案, 遇到找不到 method 也可以往這個方面來想 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.52.57

11/14 22:13, , 1F
有提供fatjar的功能?! 3.6嗎?
11/14 22:13, 1F
文章代碼(AID): #1Ct-f0vo (java)
文章代碼(AID): #1Ct-f0vo (java)