Ich habe es erfolgreich geschafft, Apache Felix aus dem Code zu starten und ein eigenes Bundle zu registrieren.
Folgende Beziehung zwischen OSGI-Projekten ist erforderlich:
[OsgiInterface]
-- bietet Schnittstellen.
[OsgiModuleA]
-- (Bündel) bietet eine Implementierung dieser Schnittstellen.
kennt [OsgiInterface]
[OsgiUsage]
-- macht von einem oder mehreren Bündeln Gebrauch.
kennt [OsgiInterface]
y [OsgiModuleA]
Jetzt habe ich Probleme, einen Dienst zu registrieren, der eine Schnittstelle implementiert. Ich würde vermuten, dass meine Einträge in manifest.mf
Dateien sind falsch.
Zusätzliche Informationen
Es wäre sehr nett, wenn sich jemand den Code in meinem vorherige Frage
Lassen Sie mich auf diese Frage eingehen:
Ich habe versucht, eine dritte Projekt OsgiSchnittstellen die eine Schnittstelle bietet SomeInterface
im Paket interfaces
. Dieses Projekt ist sowohl unter OsgiModuleA y OsgiUsage .
OsgiModuleA: manifest.mf
hat jetzt einen zusätzlichen Wert interfaces
für den Eintrag Import-Package:
. Außerdem gibt es eine Instanz von SomeInterface
die dem Aktivator zur Verfügung gestellt werden.
Wenn das Bundle gestartet wird, wird ein NoClassDefFoundError
auftritt: die Schnittstelle SomeInterface
ist nicht bekannt.
EDITAR:
Jetzt, wo der Fehler behoben ist, kann ich sagen, dass der wichtigste Teil war:
map.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
"my.interfaces; version=1.0.0");
Ohne dies habe ich ClassCastException
.