2011-03-26 31 views
0

我正在寫一個插件加載我的代碼作爲子類加載器的框架我自己的Xalan實現加載其中一個較舊的Xalan被加載到父類加載器

的問題是,該框架使用某個版本的Xerces ,這與我的代碼不兼容,我想使用我自己的jar包作爲xerces,但似乎是因爲舊的jar已經加載了,我似乎無法讓我的代碼使用我的代碼。

我在尋找一些類加載器的分離 - ,我知道這是一個已知的問題,但似乎無法來解決它

是否有任何框架,庫或代碼樣本用戶在本地在這樣一個新的罐子一個場景?

+0

查看我的相關問題http://stackoverflow.com/questions/5447633/how-to-prevent-xalan-jar-that-has-meta-inf-services -javax-xml-transform-transform – 2011-03-27 06:36:19

回答

1

您是否嘗試通過將它們放置在對應java.ext.dirs系統屬性路徑加載你的框架和Xerces庫作爲中的ExtClassLoader一部分的班?這樣,框架的Xerces實現版本將由ExtClassLoader加載。

然後,您可以將您的Xerces實現版本放置在與AppClassLoader加載的java.class.path系統屬性相對應的路徑中。

我還沒有嘗試過這個,但考慮到類加載層次結構這應該工作。你可以在這裏瞭解更多關於類加載層次的信息 - http://onjava.com/pub/a/onjava/2005/01/26/classloading.html

0

嘗試做:

ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader(); 
Thread.currentThread().setContextClassLoader(childClassLoader); 
try{ 
    // do xml parsing 
}finally{ 
    Thread.currentThread().setContextClassLoader(oldContextClassLoader); 
} 
+0

謝謝,我假設childClassLoader可以通過對它加載的類執行此操作來實現:getClass()。getClassLoader(),對不對?會嘗試寫回... – 2011-03-26 13:44:39

+0

我試過上面,它似乎沒有工作 – 2011-03-26 17:52:19

相關問題