2010-03-02 82 views
3

我開發了一個eclipse插件,它引用外部安裝目錄中存在的外部jar。正確如何確保在從eclipse插件調用時加載外部罐子類?

Bundle-ClassPath: external:C:\mylib.jar 

我的類負載 - 和插件能夠檢測到一類MyClass目前在這個外部lib: 所以我已經加入到我的bundle的classpath中的條目如下。
但是,方法a() - 我打電話在類MyClass失敗。

方法a()如下:

public void a() 
{ 
    URL url = this.class.getClassLoader().getResource("META-INF/startup-jar "); 
    ... 
} 

所以其被返回的URL是Eclipse插件目錄C:\eclipse3.4\test 而不是外部罐的物理位置,其是C:\mylib.jar

這導致方法a()失敗。現在,我的問題是 -
由於我沒有外部JAR複製到我的插件目錄(這是隻出現在類路徑的插件)

我怎麼能保證類加載器得到我的外部的URL路徑jar而不是我的插件目錄?

注意:我無法更改外部jar中的類加載機制,因爲它是第三方依賴項,我無法控制代碼。所以請建議一個能夠幫助我正確加載外部jar類的解決方案,這樣我就可以得到正確的URL。

非常感謝您的幫助 - 提前

要解釋一點對這個問題,我面對:: 我的外部JAR存在我的服務器安裝的安裝目錄中。

當我的外部罐子類調用網址URL = this.class.getClassLoader()的getResource( 「啓動-JAR」)

返回相對URL到Eclipse包路徑 - 喜歡的東西C:\ eclipse3.4 ...

此URL用於獲取啓動目錄(服務器的安裝目錄)。

所以它應該返回一個相對於服務器安裝目錄的路徑,而是返回一個相對於eclipse安裝目錄的路徑。

因此,我無法將服務器上的任何API作爲它嘗試使用的服務器安裝目錄調用不正確。

所以我想知道什麼是我可以處理這個問題的最好方法,以便這個方法調用返回服務器安裝目錄而不是eclipse的bundle路徑。

+0

對不起,我的'class.getResource'答案。 – VonC 2010-03-02 09:49:31

回答

1

難道你不能用正確的OSGI元數據包裝這個第三方依賴項並將其作爲插件/捆綁包安裝嗎?我們爲所有的第三方依賴做了這些,包括像Hibernate這樣的有問題的依賴,並使它們工作。

如果它是一個流行的開源庫,你也許可以與Spring的庫添加了OSGi元數據發現:www.springsource.com/repository/app

一般情況下,我不會推薦的模式像你在你的問題中描述的那樣引用外部JAR。

+0

通過「包裝這個第三方依賴項」,你的意思是 - 我將所有這些jar複製到另一個插件的libs下,然後將它們添加到這個新插件的bundle classpath中?然後將這個新插件添加到第一個插入? 這種方法會對getResource方法返回的值產生什麼影響嗎? – deepthinker121 2010-03-02 09:49:06

+0

如果方法a()在第三方庫中,那麼是的,它應該工作,因爲第三方庫將有它自己的類加載器。我不確定你是否有一個特定的原因,沒有可用作包/插件的庫。 – SteveD 2010-03-02 11:41:28