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 _______________________________________________ e4-dev mailing list e4-dev@eclipse.org https://dev.eclipse.org/mailman/listinfo/e4-dev