2014-09-25 105 views
1

我遇到了OSGi包項目的問題,如下所示:OSGi包導入包和嵌入依賴關係

我有需要使用JDOM的類。當我將JDOM作爲單獨的捆綁包部署時,我目前的項目工作正常。該捆綁包導出以下包:

org.jdom,version=1.0.0 
org.jdom.adapters,version=1.0.0 
org.jdom.filter,version=1.0.0 
org.jdom.input,version=1.0.0 
org.jdom.output,version=1.0.0 
org.jdom.transform,version=1.0.0 
org.jdom.xpath,version=1.0.0 

現在我想要更改項目,以便將JDOM作爲Embed-dependency包含在內。要做到這一點我想補充的依賴,以我的POM文件,並設置在Maven束-插件配置如下:

<plugin> 
<groupId>org.apache.felix</groupId> 
<artifactId>maven-bundle-plugin</artifactId> 
<extensions>true</extensions> 
<configuration> 
    <instructions> 
     <Bundle-SymbolicName>com.qnx.aem.cloudsite-bundle</Bundle-SymbolicName> 
      <Embed-Transitive>true</Embed-Transitive> 
      <Embed-Dependency>jdom</Embed-Dependency> 
    </instructions> 
</configuration> 
</plugin> 

在此之後,當我看着我們的項目捆綁包清單我看到一堆新導入包要求JDOM jar的依賴關係:jaxen,xerces等

以前部署的JDOM OSGi捆綁包如何解決這些相同的依賴關係?他們從未列入捆綁包導入包中?此外,如果我嘗試將這些作爲項目的依賴關係並嵌入它們,它只會使問題複雜化。幫幫我!

+0

我想這些包是在原始的jdom jar中用「resolution:= optional」指令導入的,或者根本沒有導入它們。你能否提供一個鏈接到您使用的jdom jar? – 2014-09-25 18:00:06

+0

當然,我使用這個JAR:http://mvnrepository.com/artifact/jdom/jdom/1.0 – 2014-09-26 18:39:34

+0

我使用了這個JDOM的捆綁版本:http://ebr.springsource.com/repository/app/bundle/version/detail ?名稱= com.springsource.org.jdom&版本= 1.0.0 – 2014-09-26 18:40:53

回答

0

您使用的軟件包會導入包含「resolution:= optional」的軟件包。由於這個原因,原始包可能已經被解析,而沒有OSGi容器中的依賴關係。

我想,當你嵌入依賴,maven-bundle-plugin分析嵌入式依賴的字節碼,而不是MANIFEST頭。軟件包導入時沒有「resolution:= optional」指令。

<Import-Package> 
    org.jaxen.*;resolution:=optional, 
    * 
</Import-Package> 

的問題是:你可以在Maven的捆綁,插件這樣的配置再次指定它要嵌入一個罐子已經是一個工作的OSGi bundle爲什麼呢?原樣使用它會更好。