2016-04-25 36 views
0

我想寫一個osgi bunlde,其中包括一個服務和serviceimpl類在兩個不同的包。 束服務和impl在一個單一的osgi包不開始

- packageA 
     - service class 
- packageB 
     - service impl class 

,因爲服務和服務實現了一套在同一個包,同時部署我得到一個缺少約束錯誤。

注意:如果我把服務和服務impl在不同的捆綁它工作正常。另外,如果我嘗試從packageB導入packageA,它工作正常。 由於兩者都在同一個包中,爲什麼我應該明確導入它。它背後的原因是什麼?

插件配置:

<plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.5.3</version> 
     <extensions>true</extensions> 
     <executions> 
      <execution> 
      <id>manifest</id> 
      <phase>process-classes</phase> 
      <configuration> 
       <unpackBundle>true</unpackBundle> 
       <manifestLocation>META-INF</manifestLocation> 
       <instructions> 
       <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName> 
       <Bundle-Version>0.2.0-SNAPSHOT</Bundle-Version> 
       <Export-Package>!${bundle.namespace}.internal.*,${bundle.namespace}.*;version="0.2.0-SNAPSHOT"</Export-Package> 
       <Private-Package>${bundle.namespace}.internal.*</Private-Package> 
       <_include>-osgi.bnd</_include> 
       <_donotcopy>CVS|.svn|.git|.nfs*|~.nfs*|^.nfs*</_donotcopy> 
       <Commit-Id>${buildNumber}</Commit-Id> 
       </instructions> 
      </configuration> 
      </execution> 
     </executions> 
     <configuration> 
      <unpackBundle>true</unpackBundle> 
      <manifestLocation>META-INF</manifestLocation> 
      <instructions> 
      <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName> 
      <Bundle-Version>0.2.0-SNAPSHOT</Bundle-Version> 
      <Export-Package>!${bundle.namespace}.internal.*,${bundle.namespace}.*;version="0.2.0-SNAPSHOT"</Export-Package> 
      <Private-Package>${bundle.namespace}.internal.*</Private-Package> 
      <_include>-osgi.bnd</_include> 
      <_donotcopy>CVS|.svn|.git|.nfs*|~.nfs*|^.nfs*</_donotcopy> 
      <Commit-Id>${buildNumber}</Commit-Id> 
      </instructions> 
     </configuration> 
     </plugin> 

在這裏,在運行時

+0

你在說什麼進口。在java類中導入或在Manifest中導入? –

+0

錯誤信息是什麼?我的意思是,如果你願意,我們可以猜測出了什麼問題,但這不太可能有幫助。 –

+0

@Chris - >導入處於清單中。 – Shriram

回答

0

生成的版本號看起來像你導入的包的清單,但不出口了。 確保您還在Manifest中定義了Export-Package標題。

當使用maven-bundle-plugin時,它應該自動工作。

+0

問題是軟件包已導出,但導入軟件包期望版本。兩者都在同一個包中,我如何給出一個版本?即)maven bundle插件沒有使用捆綁軟件的版本 – Shriram

+0

默認情況下,maven-bundle-plugin使用捆綁軟件的版本,除非定義了軟件包版本。你如何配置插件? –