2016-04-25 6 views
0

Ich versuche, eine osgi bündle, die eine Service-und Service-Klasse in zwei verschiedenen Paketen enthält zu schreiben. BündelService und impl in einem einzigen osgi-Bundle nicht starten

- packageA 
     - service class 
- packageB 
     - service impl class 

Da beide Service und Service-impl sind in demselben Bündel, während ich einen fehlenden Einschränkungsfehler am bereitstellen zu bekommen.

Hinweis: Wenn ich sowohl Service und Service impl sind in verschiedenen Bundle, es funktioniert gut. Auch wenn ich versuche, packageA aus packageB zu importieren, funktioniert es gut. Da beide im gleichen Bündel sind, warum sollte ich es explizit importieren. Was ist der Grund dafür?

Plugin-Konfiguration:

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

Hier wird die Versionsnummer wird zur Laufzeit generiert

+0

Welchen Import sprichst du? Der Import in der Java-Klasse oder der Import im Manifest? –

+0

Was war die Fehlermeldung? Ich meine, wir könnten * raten *, was schief läuft, wenn Sie möchten, aber das ist wahrscheinlich nicht hilfreich. –

+0

@Chris -> Import ist in Manifest. – Shriram

Antwort

0

Sieht aus wie Sie das Paket in dem Manifest importieren, aber exportieren es nicht. Stellen Sie sicher, dass Sie auch einen Export-Paket-Header im Manifest definieren.

Bei Verwendung des maven-bundle-plugins sollte dies automatisch funktionieren.

+0

Das Problem ist das Paket exportiert, aber im Import-Paket wird die Version erwartet. Beide sind im selben Paket wie kann ich eine Version geben? ie) maven bundle plugin nimmt nicht die Version des Bundles – Shriram

+0

Das maven-bundle-plugin verwendet standardmäßig die Version des Bundles, es sei denn, eine Paketversion ist definiert. Wie konfigurierst du das Plugin? –