Reputation: 5186
I am getting the following error when I try to start one bundle
Chain 1:
foo.bar.fizz.core.rest.impl [foo.bar.fizz.core.rest.impl [208](R 208.0)]
import: (&(osgi.wiring.package=javax.annotation)(version>=1.2.0)(!(version>=2.0.0)))
|
export: osgi.wiring.package: javax.annotation
org.apache.felix.framework [org.apache.felix.framework [0](R 0)]
Chain 2:
foo.bar.fizz.core.rest.impl [foo.bar.fizz.core.rest.impl [208](R 208.0)]
import: (&(osgi.wiring.package=foo.bar.fizz.cdac.tableobject.api)(version>=8.60.0)(!(version>=9.0.0)))
|
export: osgi.wiring.package=foo.bar.fizz.cdac.tableobject.api; uses:=com.google.common.collect
foo.bar.fizz.cdac.tableobject [foo.bar.fizz.cdac.tableobject [196](R 196.0)]
import: (&(osgi.wiring.package=com.google.common.collect)(version>=16.0.0)(!(version>=17.0.0)))
|
export: osgi.wiring.package=com.google.common.collect; uses:=javax.annotation
com.google.guava [com.google.guava [29](R 29.0)]
import: (osgi.wiring.package=javax.annotation)
|
export: osgi.wiring.package: javax.annotation
org.jsr-305 [org.jsr-305 [28](R 28.0)] Unresolved requirements: [[foo.bar.fizz.core.rest.impl [208](R 208.0)] osgi.wiring.package; (&(osgi.wiring.package=foo.bar.fizz.cdac.tableobject.api)(version>=8.60.0)(!(version>=9.0.0)))]
I understand why the error comes (because one dependency is coming from two flows and osgi is confused between the two). However, I don't get how to avoid this since one flow is "org.apache.felix' which starts with 0 start level and I can't seem to alter that.
Here are more logs for the bundle:tree-show
foo.bar.fizz.cdac.tableobject [197]
+- foo.bar.fizz.cdac.api [194]
| +- foo.cil.cdac.cil-cdac-common-api [133]
| +- avro [292]
| | +- org.xerial.snappy.snappy-java [329]
| | +- jackson-core-asl [314]
| | +- jackson-mapper-asl [315]
| | | +- jackson-core-asl [314]
| | +- org.ops4j.pax.logging.pax-logging-api [6]
| | | +- org.apache.karaf.services.eventadmin [3]
| | | +- org.apache.felix.metatype [2]
| | | +- org.apache.felix.configadmin [9]
| | | +- org.apache.felix.coordinator [8]
| | +- org.apache.commons.compress [293]
| | | +- org.tukaani.xz [328]
| | +- com.thoughtworks.paranamer [257]
| | +- org.glassfish.hk2.external.jakarta.inject [92]
| +- com.google.gson [252]
| +- foo.bar.common.datatypes.date [224]
| | +- joda-time [287]
| +- foo.cil.client.service [136]
| | +- avro [292]
| | +- org.apache.servicemix.bundles.lucene [309]
| | +- org.apache.servicemix.bundles.lucene-queryparser [307]
| | +- org.apache.servicemix.bundles.lucene [309]
| | +- org.apache.servicemix.bundles.lucene-sandbox [308]
| | | +- org.apache.servicemix.bundles.lucene [309]
| | | +- org.apache.servicemix.bundles.jakarta-regexp [303]
| | +- org.apache.servicemix.bundles.lucene-queries [306]
| | +- org.apache.servicemix.bundles.lucene [309]
| +- org.ops4j.pax.logging.pax-logging-api [6]
| +- foo.bar.fizz.businessentity [193]
| +- foo.bar.common.datatypes.date [224]
+- foo.bar.common.datatypes.date [224]
+- com.fasterxml.jackson.core.jackson-databind [242]
| +- com.fasterxml.jackson.core.jackson-annotations [238]
| +- com.fasterxml.jackson.core.jackson-core [240]
+- org.ops4j.pax.logging.pax-logging-api [6]
+- foo.bar.fizz.businessentity [193]
+- com.google.guava [30] <- START LEVEL
+- org.jsr-305 [29]
+- org.glassfish.hk2.external.jakarta.inject [92]
karaf@root()>
Please suggest something that can solve this or at least point me in the right direction.
Upvotes: 0
Views: 448
Reputation: 1720
Thing is, do you really need to install org.jsr-305
in chain 2 if the packages is already exported by the felix framework in chain 1 ?
Changing from Felix to Equinox would solve the problem if Equinox doesn't export that package at first, but note that Felix is also quite faster than Equinox to boot (multi-thread resolution, etc)
Upvotes: 0
Reputation: 5186
The solution I opted for is to change my osgi implementation from Felix to Equinox.
Apparently, karaf, by default, uses felix but you can override it using custom.properties file and add the following line to it
Dir structure
assembly
etc
custom.properties
File content
karaf.framework=equinox
Explanation
Felix provides its own javax.annotation which I couldn't exclude so I opted for this solution.
Upvotes: 0