2016-03-23 7 views
4

У меня возникают проблемы с MANIFEST.MF, сгенерированным плагином maven-bundle. По какой-то причине, когда у меня есть номера версий, перечисленные в поле <Import-Package>, инфраструктура OSGi не загружает мой пакет.Как исключить номера версий из Import-Package с помощью maven-bundle-plugin?

Я экспериментировал и замечал, что если я удалю номера версий в манифесте, то пакет правильно загрузится.

Как я могу указать 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)" 

Но мне нужно, чтобы произвести:

Import-Package: 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, вы можете использовать команду 'export' в оболочке gogo, чтобы найти версию экспортируемого пакета? Я не думаю, что можно опустить версию с помощью этого плагина.возможно, что-то вроде '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

Добавление version=! в Import-Package разделе к каждому из пучков, которые вы хотите исключить версию из будет делать трюк.

<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> 

 Смежные вопросы

  • Нет связанных вопросов^_^