2010-03-11 69 views

回答

1

以我的經驗,肯定會的。被使用的jar將是首先加載的jar文件,它基於類加載器,而不是,我認爲它是按照有保證的順序。因此,這意味着某些代碼可能取決於版本1.8中的功能,然後1.6會加載並在嘗試使用時引發異常。

0

當然,它可能會給你不同的結果,有時取決於應用服務器,有時取決於包裝。

如果你的應用程序使用了一個類,並且在兩個jar文件中都聲明瞭X,那麼它們中的一個將由類加載器加載,並且可以說需要一個Y類, (通常是第一個),但不能保證它們會來自同一個罐子。

所以,如果有兩個版本的相同jar你需要檢查爲什麼發生這種情況,並嘗試刪除其中的一個。 (如果你正在使用maven有不同的方法來實現這一點)

4

是的,這是一個壞主意。 可能發生如果你幸運的話是在類路徑中第一個出現的兩個版本中的哪一個將滿足所有的引用。如果發生這種情況,那麼其他版本的.jar文件根本就不重要。但是,依賴舊版本庫的舊代碼可能會錯誤地選取新版本的某些類,因此可能會發生各種奇怪的壞事。

現在,在一個包含許多獨立類加載器的應用程序中,只要具有不同類加載器的獨立子系統保持不同版本的分離,這種情況就可能發生。但是,如果您正在討論系統類路徑中多個對.jar的引用,那麼它不是多個類加載器的情況。

0

是的,它會導致問題,因爲只有其中一個將被實際使用,取決於哪一個被類加載器加載以及它們被加載的順序。

1

如果兩個版本實際上都是通過相同的類加載器加載的,則只會有問題。通過出現在常規類路徑上。

如果您通過單獨的類加載器加載不同的版本,可以使其工作。 大概你看的應用程序是這樣做的。或者他們只是升級了JAR並忘記刪除舊版本。

相關問題