2009-09-04 85 views
15

我想使用的maven-bundle-plugin嵌入JAR文件與Maven的捆插件的OSGi包

令我擔心的是,嵌入式JAR文件的所有包都放在事物的功能嵌入一些JAR文件到單個OSGi包到生成的MANIFEST.MF的Import-Package標題中。

如果我指定明確下面的代碼片段只使用我所需要的包裝,如:

Import-Package: org.osgi.framework 

構建失敗,BND錯誤(未解析的引用)。

所以,這裏的問題是我如何使用帶有「Import-Package」頭部的嵌入式JAR生成我需要的包?

+0

你可以發佈你使用的maven-bundle-plugin指令嗎? – 2009-09-05 04:44:24

回答

9

所有在你的類中導入的包都會被bnd導入。也許你不希望這些包導入,因爲知道在運行時你不會需要它們。如果您無法阻止bnd導入它們,則可以將它們設置爲可選,這樣即使它們不是由另一個捆綁包提供(在連線時),它仍然可以解析。嘗試添加:

<Import-Package>*;resolution:=optional<Import-Package> 

在maven中的maven bnd配置。

+1

我不希望它們被導入,原因有兩個:1)它們在同一個包中(在嵌入式JAR中),據我所知,我根本不需要導入它們!所以這只是增加了一些垃圾到MANIFEST.MF,我想要乾淨。 2)不希望它們被意外從另一個捆綁包導入。 – 2009-09-05 03:51:48

+0

捆綁插件相當令人沮喪,直到我明白了這一點。 – javamonkey79 2010-12-30 18:41:22

5

一個爲什麼你看到在導入-Package頭「意外」的包可能的原因如下:

支持OSGi的合作模式是導入您導出所有的包一般好的做法 - 請參閱Peter Kriens的this blog post以獲取詳細解釋。 Bnd(因此也是maven-bundle-plugin)默認採用這種做法,並自動導入所有導出的包。因此,您應該首先檢查Export-Package標題,並確保僅導出所需的軟件包。

此外,如果您想從嵌入式依賴關係中導出包,那麼您應該小心避免包中的重複 - 請參閱maven-bundle-plugin文檔的Embed-Dependency and Export-Package部分。

+0

也許你是對的...下次我打這個時候會檢查。現在我們決定不去使用自動生成的清單。 – 2009-09-07 15:14:44

5

如果您希望在包含JAR的包中使用類,您應該使用Bundle-ClassPath。

Bundle-ClassPath: foo.jar,other.jar 
Import-Package: org.osgi.framework,org.other.imported 

你需要列出foo.jar中和other.jar進口/使用的類,但你不會需要列出任何軟件包中foo.jar中或other.jar除非你」實際上出口他們。

+0

對。問題是,maven OSGi插件(它建立在bnd工具之上)爲foo.jar和other.jar中的每個包創建Import-Package! – 2009-09-07 15:12:56

+0

您可以配置bnd不爲特定包生成導入語句。在這個例子中,你可能也想嘗試提出一個針對BND的bug。 – AlBlue 2009-09-08 21:18:58

2

當你嵌入JAR到你的包,您可以刪除從進口包範圍一些軟件包:

<Import-Package>![package_name9]<Import-Package> 

內的pom.xml或者如果你使用外部* .BND文件:

Import-Package: ![package_name] 
相關問題