My main question is ... is this required for Luna? (I assume not, that it 
shows up in "e4 incubator"?  so could wait to SR1 if we find a safe, 
non-breaking change? Or Mars if breaking?) 

Second, I've only barely read the details (they make my head spin) but 
wondering if it is reasonable for "resolver.problem" to require Java 8 AND 
javax.annotaion 1.0.0? That seems quite a mix of "old and new"? I assume 
this is an attempt to "be compatible" with older bundles that require 
javax.annotation 1.0? 

If it helps, and if you haven't already, you might want to read 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=424909#c0 and what it points 
to, https://bugs.eclipse.org/bugs/show_bug.cgi?id=422981#c5 

Now for some "wild ideas" to show my ignorance ... which helps 
occasionally :) ... 

I notice in Orbit, all our "javax.annotation" bundles follow the import 
what you export pattern .... that's good, such as 

Export-Package: javax.annotation;version="1.2.0",
 javax.annotation.security;version="1.2.0",
 javax.annotation.sql;version="1.2.0"
Import-Package: javax.annotation;version="1.2.0",
 javax.annotation.security;version="1.2.0",
 javax.annotation.sql;version="1.2.0"

BUT, in this case, I wonder if we should be so "restrictive" about what we 
import? Would the following be better? 

Export-Package: javax.annotation;version="1.2.0",
 javax.annotation.security;version="1.2.0",
 javax.annotation.sql;version="1.2.0"
Import-Package: javax.annotation,
 javax.annotation.security,
 javax.annotation.sql

I suppose that's  about the same as "requiring system.bundle"? Just "mix 
in" with what ever in in running JRE? (Which, from 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=422981#c5 sounds like it 
would work, in this case ... that is, high degree of similarity, except 
for "new" things? 
I'm just throwing this out as an idea ... only the experts could say if it 
makes sense. 

As for your suggestion 
b) guava does import javax.annotation;1.0.0 instead

I'm assuming our Orbit guava version is what they (the "third party") 
provides (which is what we always strive for) so you might work with them, 
to find out if there's a reason they did it the way they did, if they'd be 
willing to change, etc. 

But I'm mostly asking ... this isn't blocking Luna, right? 



Thanks, 







From:   Tom Schindl <tom.schi...@bestsolution.at>
To:     equinox-...@eclipse.org, E4 Project developer mailing list 
<e4-dev@eclipse.org>, orbit-...@eclipse.org, 
Date:   06/10/2014 04:32 PM
Subject:        [equinox-dev] Resolver Problem with guava and e4 
(javax.annotation)
Sent by:        equinox-dev-boun...@eclipse.org



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


_______________________________________________
e4-dev mailing list
e4-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/e4-dev

Reply via email to