2016-03-23 92 views
4

我遇到了maven-bundle-plugin生成的MANIFEST.MF問題。出於某種原因,當我在<Import-Package>字段中列出版本號時,OSGi框架不會加載我的包。如何使用maven-bundle-plugin從Import-Package中排除版本號?

我已經試驗過並注意到如果我刪除清單中的版本號,那麼該包已正確加載。

我該如何指示maven-bundle-plugin跳過版本號?

目前,它產生:

Import-Package: com.ghc.ghTester.expressions,org.apache.ws.security.proc 
essor;version="[1.5,2)",org.apache.ws.security;version="[1.5,2)",org.ap 
ache.ws.security.message;version="[1.5,2)",org.apache.ws.security.compo 
nents.crypto;version="[1.5,2)",org.apache.ws.security.message.token;ver 
sion="[1.5,2)" 

但我需要它來生成:

進口包裝:com.ghc.ghTester.expressions,org.apache.ws.security.proc ESSOR ,org.apache.ws.security,org.apache.ws.security.message,org.apache。 ws.security.components.crypto,org.apache.ws.security.message.token

我的插件配置爲:

 <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>3.0.0</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId};singleton:=true</Bundle-SymbolicName> 
        <Bundle-Name>${pom.name}</Bundle-Name> 
        <Bundle-Version>${pom.version}</Bundle-Version> 
        <Bundle-ClassPath>{maven-dependencies},.</Bundle-ClassPath> 
        <Embed-Dependency>*;scope=compile</Embed-Dependency> 
        <Export-Package/> <!-- nothing for this bundle to export --> 
        <Import-Package>com.ghc.ghTester.expressions,org.apache.ws.*</Import-Package> 
       </instructions> 
      </configuration> 
     </plugin> 

如果我嘗試用版本加載它,我得到以下錯誤:

org.osgi.framework.BundleException: Could not resolve module: com.rit.message-level-security [978] 
    Unresolved requirement: Import-Package: org.apache.ws.security; version="[1.0.0,3.0.0)" 

     at org.eclipse.osgi.container.Module.start(Module.java:434) 
     at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:393) 
     at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:412) 
     at com.ghc.ghTester.Activator.installTempBundle(Activator.java:157) 
+0

忽略版本不是一個好習慣。部署捆綁包時出現什麼錯誤?你不能使用你的依賴關係部署的版本? –

+1

我意識到這不是一個好習慣,但這是一個非常有限的插件,將用於非常有限的框架。該框架完全超出了我的控制範圍,當我嘗試加載我的包時,我甚至都看不到錯誤消息。從試驗和錯誤中,我發現這是導致問題的版本號,最簡單的方法是放棄版本。 –

+0

如果你使用的是felix,你可以在gogo shell上使用'exports'命令來找到導出的包的版本號。我不認爲有可能用這個插件省略版本。也許像'version = [0,9]''可以工作,但它確實很難看,並且打敗了osgi的依賴關係管理的目的 –

回答

0

你可以手動啓動編寫進口喜歡你 「com.ghc.ghTester.expressions」

<Import-Package> 
com.ghc.ghTester.expressions, 
org.apache.ws.security.processor, 
org.apache.ws.security, 
org.apache.ws.security.message, 
org.apache.ws.security.components.crypto, 
org.apache.ws.security.message.token 
</Import-Package> 

即使這不是一個好的做法,如評論中提到的,它應該做的伎倆。但是如果您稍後需要額外的輸入,您還必須手動添加它們。

順便說一句。值爲

<Bundle-Name>${pom.name}</Bundle-Name> 
<Bundle-Version>${pom.version}</Bundle-Version> 

默認爲您提供的值。見http://felix.apache.org/documentation/subprojects/apache-felix-maven-bundle-plugin-bnd.html 科:默認行爲

2

您可以通過以下配置禁用Import-Package版本:

<_consumer-policy>$${range;[--,++)}</_consumer-policy> 
2

Import-Package小節添加version=!每個要忽略版本從會做的伎倆束的。

<Import-Package> 
    com.ghc.ghTester.expressions;version=!, 
    org.apache.ws.security.processor;version=!, 
    org.apache.ws.security;version=!, 
    org.apache.ws.security.message;version=!, 
    org.apache.ws.security.components.crypto;version=!, 
    org.apache.ws.security.message.token;version=!, 
    * 
</Import-Package>