[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[equinox-dev] Resolver Problem with guava and e4 (javax.annotation)
|
Hi,
[cross posting because different projects are involved in the problem]
I've just discover a problem when one tries to use e4-DI and
com.google.guava 15.0.0.
The MANIFEST.MF is really simply:
> Manifest-Version: 1.0
> Bundle-ManifestVersion: 2
> Bundle-Name: Problem
> Bundle-SymbolicName: resolver.problem
> Bundle-Version: 1.0.0.qualifier
> Bundle-RequiredExecutionEnvironment: JavaSE-1.8
> Import-Package: javax.annotation;version="1.0.0"
> Require-Bundle: com.google.guava;bundle-version="15.0.0"
and when trying to resolve it one gets:
> resolver.problem [196]
> Bundle was not resolved because of a uses contraint violation.
> org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource resolver.problem [osgi.identity; osgi.identity="resolver.problem"; type="osgi.bundle"; version:Version="1.0.0.qualifier"] because it is exposed to package 'javax.annotation' from resources javax.annotation [osgi.identity; osgi.identity="javax.annotation"; type="osgi.bundle"; version:Version="1.2.0.v201401042248"] and org.eclipse.osgi [osgi.identity; osgi.identity="org.eclipse.osgi"; type="osgi.bundle"; version:Version="3.10.0.v20140528-2014"; singleton:="true"] via two dependency chains.
>
> Chain 1:
> resolver.problem [osgi.identity; osgi.identity="resolver.problem"; type="osgi.bundle"; version:Version="1.0.0.qualifier"]
> import: (&(osgi.wiring.package=javax.annotation)(version>=1.0.0))
> |
> export: osgi.wiring.package: javax.annotation
> javax.annotation [osgi.identity; osgi.identity="javax.annotation"; type="osgi.bundle"; version:Version="1.2.0.v201401042248"]
>
> Chain 2:
> resolver.problem [osgi.identity; osgi.identity="resolver.problem"; type="osgi.bundle"; version:Version="1.0.0.qualifier"]
> require: (&(osgi.wiring.bundle=com.google.guava)(bundle-version>=15.0.0))
> |
> provide: osgi.wiring.bundle; bundle-version:Version="15.0.0.v201403281430"; osgi.wiring.bundle="com.google.guava"
> com.google.guava [osgi.identity; osgi.identity="com.google.guava"; type="osgi.bundle"; version:Version="15.0.0.v201403281430"]
> import: (osgi.wiring.package=javax.annotation)
> |
> export: osgi.wiring.package: javax.annotation
> org.eclipse.osgi [osgi.identity; osgi.identity="org.eclipse.osgi"; type="osgi.bundle"; version:Version="3.10.0.v20140528-2014"; singleton:="true"]
The reason is that guava optionally imports:
Import-Package: javax.annotation;resolution:=optional,javax.inject;res
olution:=optional,sun.misc;resolution:=optional
So guava wires to the package from the JDK and presents classes in its
API so I guess that's why the bundles who uses guava results in the
resolution conflict.
There are 2 possible solutions:
a) because we now require JavaSE-6 in all our e4 code we could remove
the need for explicit javax.annotation imports - this would break
existing code but is maybe the correct solution in the long run?
b) guava does import javax.annotation;1.0.0 instead
Tom