/ / Glassfish OSGI mit Abhängigkeiten, wie? - Glassfish, Abhängigkeiten, osgi

Glassfish OSGI mit Abhängigkeiten, wie? - Glassfish, Abhängigkeiten, osgi

Ich habe ein reguläres maven jar Projekt, das Abhängigkeiten wie die Reflektionsbibliothek hat und ich möchte konvertiere es zu osgi, was ich schon gemacht habe.

  1. erstellte eine gemeinsame Schnittstellenschicht in einem anderen (Maven-) Gefäß Projekt und fügte es dem Paket als Abhängigkeiten hinzu.
  2. änderte den Typ des osgi-modul-to-be in "bundle".
  3. erstellt eine Implementierung von BundleActivator
  4. hat dieses Plugin hinzugefügt:

<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator>
<Export-Package>
my.package.exp.*
</Export-Package>
<Import-Package>
!org.reflections,???
</Import-Package>
<Embed-Dependency>
slf4j-api;scope=compile,???
</Embed-Dependency>
</instructions>
</configuration>

hier geht es verloren, ich muss das "Import-Paket" und die "Einbettungsabhängigkeit" herausfinden und, noch wichtiger wie man es auf Glasfischen als Zip oder vielleicht, ORB (oder Gogo), damit es mit all seinen Abhängigkeiten deployed wird.

irgendwelche Ideen?

G.

Übrigens: Das org.reflections-Paket ist nicht OSGi-fähig

Antworten:

0 für die Antwort № 1

Es scheint, als ob Sie verwirrt darüber sind, wie OSGi und das Maven Bundle Plugin funktionieren. Vielleicht hilft Ihnen das Lesen des Felix-Leitfadens:

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

Im Grunde solltest du so etwas haben:

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator>
<Export-Package>
my.package.exp.*
</Export-Package>
<Import-Package>
!org.reflections*,*
</Import-Package>
<Embed-Dependency>
org.reflections
</Embed-Dependency>
</instructions>
</configuration>
</plugin>

Standardmäßig (dh wenn Sie es einfach weglassen, was normalerweise der Fall ist), wären Ihre Import-Package-Anweisungen *, was alles bedeutet, auf das Sie im Code verweisenwas nicht in Java ist. * oder in einem eigenen Bundle sollte importiert werden. Da Sie jedoch eine Abhängigkeit von einem Nicht-Bündel-Jar haben, das Sie einbetten möchten, müssen Sie dem Plugin mitteilen, dass Sie den Ausdruck verwenden !org.reflections*,*Das bedeutet, dass Sie das Paket org.reflections nicht importieren möchten, aber alles andere ist in Ordnung. Sie müssen auch angeben, dass eine beliebige artifactId aufgerufen wird org.reflections sollte mithilfe der Embed-Dependency-Anweisung in das Jar eingebettet werden.

Übrigens, Sie möchten wahrscheinlich Ihre Implementierung des Logging-Frameworks SLF4J nicht einbetten, geschweige denn die API, da fast jede OSGi-Umgebung eine Logging-Implementierung für Sie bereitstellen sollte.

Nachdem Sie Ihr Paket verpackt haben (MVN Paket odereinfach mvn installieren) stellen Sie sicher, das generierte MANIFEST zu überprüfen, um sicherzustellen, dass es aussieht, als ob alles korrekt ist (wichtig, überprüfen Sie die Import-Paket-Pakete und sehen, ob Ihre Umgebung alle Bündel haben wird, die solche Pakete bereitstellen).

Sobald Sie Ihr Paket richtig eingerichtet haben,es zu implementieren ist trivial. Legen Sie sie einfach in das Bundle-Verzeichnis Ihres Frameworks, stellen Sie sicher, dass alle anderen Bundles, die Sie benötigen, ebenfalls vorhanden sind, und alles sollte gut funktionieren.

Als Nebenbemerkung möchten Sie möglicherweise die Verwendung der Nicht-Bundle-JAR, die Sie als Bundle benötigen, umhüllen PAX-WRAP oder einfach Karaf (werfen Sie einfach ein JAR in den Ordner "deploy" und Sie erhalten es sofort als OSGi-Paket verpackt).