2016-04-08 4 views
0

in Quarz-sample-nested-Krügen Beispiel org.dm.bundle:Fehler, wenn sie von Gradle OSGi Plugin Schalt Plugin

https://github.com/paulvi/osgi-run/tree/master/osgi-run-test/quartz-sample-nested-jars

irrtümlicher ist, so resultierten Bündel in Felix nicht aktiv ist, und kann Ich werde nicht anfangen.

Warum benötigt das Bundle osgi.wiring.package = commonj.work? Woher kommt das? Wenn es eine Gradle-Abhängigkeit von Ihrem Projekt wäre, hätte osgi-run es zur Laufzeit hinzugefügt ... vielleicht müssen Sie lediglich eine osgiRuntime-Deklaration org: commonj.work: version in den Gradle-Deps hinzufügen?

vollständige log

# parseClassFile(): path=org/xml/sax/ErrorHandler.class resource=:file:/C:/Program%20Files/Java/jdk1.8.0_74/jre/lib/rt.j 
ar!/org/xml/sax/ErrorHandler.class: 
:quartz-sample-nested-jars:createOsgiRuntime 
> Building 83% > :quartz-sample-nested-jars:runOsgi 

:quartz-sample-nested-jars:runOsgi 
org.osgi.framework.BundleException: Unable to resolve com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0): mis 
sing requirement [com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.packa 
ge=commonj.work) Unresolved requirements: [[com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.p 
ackage; (osgi.wiring.package=commonj.work)] 
ERROR: Bundle com.athaydes.gradle.osgi.quartz-sample-nested-jars [6] Error starting file:/D:/Workspaces/GitHub/osgi-run/ 
osgi-run-test/quartz-sample-nested-jars/build/osgi/bundle/quartz-sample-nested-jars-1.0.jar (org.osgi.framework.BundleEx 
ception: Unable to resolve com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0): missing requirement [com.athay 
des.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=commonj.work) Unresolved 
requirements: [[com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.packag 
e=commonj.work)]) 
     at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111) 
     at org.apache.felix.framework.Felix.startBundle(Felix.java:2117) 
     at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371) 
     at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308) 
     at java.lang.Thread.run(Thread.java:745) 
____________________________ 
Welcome to Apache Felix Gogo 

> Building 83% > :quartz-sample-nested-jars:runOsgilb 
g! g! g! START LEVEL 1 
    ID|State  |Level|Name 
    0|Active  | 0|System Bundle (5.4.0)|5.4.0 
    1|Active  | 1|c3p0 (0.9.1.1)|0.9.1.1 
    2|Active  | 1|Apache Felix Gogo Command (0.16.0)|0.16.0 
    3|Active  | 1|Apache Felix Gogo Runtime (0.16.2)|0.16.2 
    4|Active  | 1|Apache Felix Gogo Shell (0.12.0)|0.12.0 
    5|Active  | 1|quartz (2.2.1)|2.2.1 
    6|Installed | 1|com.athaydes.gradle.osgi.quartz-sample-nested-jars (1.0.0)|1.0.0 
    7|Active  | 1|slf4j-api (1.6.6)|1.6.6 
    8|Resolved | 1|slf4j-simple (1.6.6)|1.6.6 
> Building 83% > :quartz-sample-nested-jars:runOsgistart 6 
org.osgi.framework.BundleException: Unable to resolve com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0): mis 
sing requirement [com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.package; (osgi.wiring.packa 
ge=commonj.work) Unresolved requirements: [[com.athaydes.gradle.osgi.quartz-sample-nested-jars [6](R 6.0)] osgi.wiring.p 
ackage; (osgi.wiring.package=commonj.work)] 
> Building 83% > :quartz-sample-nested-jars:runOsgi 

offene Frage https://github.com/renatoathaydes/osgi-run/issues/36 (nicht wirklich da gehört)

Antwort

1

Das Problem in dem Quarzbündel Manifest zu sein scheint, die diese in der Export-Package Anweisung enthält:

org.quartz.commonj; 
uses:="commonj.work,javax.naming,org.quartz.spi,org.slf4j"; 
version="2.2.1" 

Und später, in der Import-Package Anweisung, dies:

commonj.work;resolution:=optional 

Also, für dieses Bundle um org.quartz.commonj zu exportieren, muss es commonj.work importiert hat, aber dies ist ein optionaler Import ...

Ich bin nicht sicher, was die OSGi-Spezifikation sagt, dass es passieren sollte in In diesem Fall habe ich versucht, in der Spezifikation zu finden, aber ich konnte nichts spezifisch für diesen Fall finden ... Meine Interpretation ist, dass das Paket noch das org.quartz.commonj Paket exportieren sollte, da die Spezifikation nur besagt, dass optional Anforderungen nicht verhindern können Die Verkabelung des Pakets ist nicht zufriedengestellt, es sagt nichts über exportierte Pakete aus, die auf optionalen Importen beruhen, soweit ich das beurteilen kann.

Die Frage ist nun, warum das mit der osgi Plugin funktioniert, die Bnd nur ruft das Manifest zu erstellen, aber nicht mit org.dm.bundle, die auch Bnd nennt, aber das ganze Glas zu schaffen ...

Beim Laufen In Felix kann ich sehen, dass das org.quartz.commonj Paket erfolgreich durch das Quarzbündel exportiert wird und für die Verdrahtung zu anderen Bündeln zur Verfügung gestellt wird, also denke ich, dass dies erlaubt sein sollte zu arbeiten.

Ich schlage vor, einen Fehler mit org.dm.bundle oder direkt mit Bnd zu füllen. Ich bin sicher, dass sie in der Lage sind, eine solidere Antwort zu geben, und wenn sie es für angemessen halten, beheben sie eventuell vorhandene Fehler, die dieses Problem verursachen könnten.