2012-04-01 29 views
1

我想構建一個Eclipse插件,它依賴於必須單獨分發給它的庫。原因是:如何將庫封裝爲另一個插件使用的eclipse插件

  1. 這是一個商業圖書館,而插件將免費分發。此外,大多數人不需要它,我們不想混淆用戶。
  2. 目前該庫至少有兩個版本在使用,我們不想構建兩個不同版本的插件。該界面是兼容的,所以我們只能發佈一個版本的插件。

該插件用於基於Eclipse的開發環境,目的是在該環境中提供我們的庫功能。庫本身依賴於其他免費組件,我可以將它捆綁在一起而不會出現問題。

由於我不知道是否允許我確切地說出它是哪個庫,但我必須保持這個明確,我們稱之爲庫「L」和我試圖開發「P」的插件。

我正在使用bnd工具,至此我已經嘗試將L封裝爲獨立插件,並作爲插件片段。

作爲一個獨立的插件,它被主機eclipse環境所接受,我可以列舉它作爲P的依賴關係併成功構建它。但是,在運行時,P插件沒有在其類路徑中看到來自L庫的資源。主要是META-INF /服務中的需求。

接下來,我嘗試將L封裝爲P的插件片段。我希望這可以工作,因爲規格說,片段的類路徑與其主機插件合併。這是行不通的,因爲我無法使用L的類作爲P的構建依賴關係 - 將L放入eclipse的插件目錄中並不會導致它被識別爲已安裝的插件。

所以我卡住了。我需要L's jar作爲P運行時的一部分並構建classpath,同時將它們放在一個單獨的插件中。我試圖做甚至可能嗎?

回答

1

爲了使P具有L的資源可見性,L必須將包含的文件夾導出爲'包'並且P必須導入它們。這看起來有點不雅,但確實允許像META-INF/services這樣的文件夾在P的類路徑上。

或者,對於特別是META-INF/services,您可以在ServiceLoaders的區域中查看Enterprise OSGi規範的第5版中的新功能。一個很好的博客解釋這個想法是http://coderthoughts.blogspot.co.uk/2011/08/javautilserviceloader-in-osgi.html,Apache Aries有一個early implementation

1

Eclipse插件對其他插件的依賴可以定義爲Optional。如果用戶沒有它,您可以使用Class.forName來檢查是否已加載相關類。

0

顯然你沒有列出'library'插件作爲'main'插件的OSGI導入。沒有看到你的清單,無法確定。

0

根據我的理解,你想添加jar作爲插件依賴。 這樣做的最佳方法轉到插件視圖 - >將您的jar文件複製到插件目錄 - >將其作爲工作空間中的源項目導入。 Plugin.xml - >依賴關係選項卡 - >將其添加爲依賴項。

如果您想將其封裝在插件中,請使用動態庫加載機制。

相關問題