2012-01-16 188 views
0

我有2個庫:owls.jarenvy.jar。他們取決於lib jena.jar但兩個不同的,不可修改的版本。使用舊版本的羨慕 - jena.jar,貓頭鷹新 - jena2.jar 我想在Web應用程序togever使用它們與GlassFish 3.0.1運行。我正在使用想法11部署我的網絡應用程序。使用不同版本的相同庫

我的目錄樹是這樣的:

  • 的webapp/WEB-INF/lib目錄/ envy.jar
  • 的webapp/WEB-INF/lib目錄/ owls.jar
  • 的webapp/lib中/羨慕/jena.jar
  • 的webapp/lib目錄/貓頭鷹/ jena2.jar

我加入到MANIFEST.MF羨慕的和貓頭鷹這樣的庫類路徑:../../lib/envy/jena.jar

我用-verbose:類選項,我總是從jena.jar。如果我真的得到加載的類使用或不使用envy.jar所有,我總是從jena.jar得到加載類。只有當我從jena2.jar刪除envy.jar然後類負載

的是,有什麼辦法可以同時使用這個庫的?

回答

0

使用2個不同版本的同一個類的唯一方法是將它們放在2個不同的類加載器中。這是你必須加載owls.jar__和__jena.jar與一個類加載器和envy.jarjena2.jar與另一個。這個解決方案有其自身的缺陷,您應該使用自定義代碼,在必要時可以使用另一個類加載器,也許您最終會編寫自己的類加載器。

據我所知,目前還沒有針對這種情況的解決方案。可能是,使用老版本的上述罐子更容易,可以支持相同版本的jena.jar這是更容易的解決方案。

+0

可能你可以舉一些例子嗎?我只知道如何加載類,然後使用反射來訪問它們,但我不知道如何爲某個3dparty庫加載類。我知道如何加載**貓頭鷹**類,但我怎樣才能加載** jena2 **類的貓頭鷹**庫? – kornero 2012-01-16 14:05:10

+0

不幸的是,我需要使用圖書館,使用** jena **的新版本。而且我還需要另一個使用舊版本** jena **的lib,並且不會再有更新。據我瞭解,沒有辦法做到這一點?或者我可以用我自己的類加載器做?如果是的話,那麼你可能會知道一些我可以讀的關於它的內容(如何爲3dparty庫加載類)? – kornero 2012-01-16 14:13:58

相關問題