Re: [equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-07-11 Thread Andreas Sewe
David M Williams wrote:
 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

Is this import what you export best practice for *all* javax.* bundles
in Orbit? As far as I can see, some of them don't follow this policy
(javax.xml.bind, for example, whose packages are also provided by the
system bundle provides at least from Java 7 onwards) and I am wondering
whether it's worth opening bugs for this.

Best wishes,

Andreas

-- 
Codetrails GmbH
The knowledge transfer company

Robert-Bosch-Str. 7, 64293 Darmstadt
Phone: +49-6151-276-7092
Mobile: +49-170-811-3791
http://www.codetrails.com/

Managing Director: Dr. Marcel Bruch
Handelsregister: Darmstadt HRB 91940
___
equinox-dev mailing list
equinox-dev@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/equinox-dev


Re: [equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-07-11 Thread BJ Hargrave
Importing what you export is only useful when the bundle contains other 
packages which actually use the exported package. For example, a bundle 
implements the OSGi Event Admin service. That bundle can export the 
org.osgi.service.event package and also import it. The bundle is happy to 
use any (version matching) org.osgi.service.event package.

But if the bundle is just a container of packages which it exports for 
other and does not itself use the packages in anyway, then there is less 
value in also importing the packages. Say a bundle just contains the 
org.osgi.service.event package and exports it as well as imports it. If 
this bundle is resolved to import the package, the bundle is essentially 
empty. It is not exporting the package and has no other packages.

I don't know the make up of the bundles in question here. But is may or 
may not make sense to import the packages being exported. What the bundle 
contains will influence the choice. That being said, there is little harm 
in also importing the packages, so it is a safe (but perhaps of little 
value) choice.
-- 

BJ Hargrave
Senior Technical Staff Member, IBM
OSGi Fellow and CTO of the OSGi Alliance
hargr...@us.ibm.com

office: +1 386 848 1781
mobile: +1 386 848 3788




From:   Andreas Sewe andreas.s...@codetrails.com
To: equinox-dev@eclipse.org, orbit-...@eclipse.org
Date:   2014/07/11 04:38
Subject:Re: [equinox-dev] Resolver Problem with guava and e4 
(javax.annotation)
Sent by:equinox-dev-boun...@eclipse.org



David M Williams wrote:
 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

Is this import what you export best practice for *all* javax.* bundles
in Orbit? As far as I can see, some of them don't follow this policy
(javax.xml.bind, for example, whose packages are also provided by the
system bundle provides at least from Java 7 onwards) and I am wondering
whether it's worth opening bugs for this.

Best wishes,

Andreas

-- 
Codetrails GmbH
The knowledge transfer company

Robert-Bosch-Str. 7, 64293 Darmstadt
Phone: +49-6151-276-7092
Mobile: +49-170-811-3791
http://www.codetrails.com/

Managing Director: Dr. Marcel Bruch
Handelsregister: Darmstadt HRB 91940
___
equinox-dev mailing list
equinox-dev@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe 
from this list, visit
https://dev.eclipse.org/mailman/listinfo/equinox-dev


___
equinox-dev mailing list
equinox-dev@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/equinox-dev

Re: [equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-07-11 Thread Thomas Watson

One clarification on import/export.  If your bundle X is a container
bundle as BJ describes and it imports/exports the packages AND its imports
resolve to another bundle then the bundle is effectively empty as BJ
describes.  But there is one important thing to note about such an empty
bundle:  Other bundles that happen to require bundle X will now wire to
the substituted packages that bundle X wires to which replaced/substituted
the packages declared to be exported by bundle X.

The other thing to note about this scenario that involves system packages.
The framework *still* does not know what version to export the packages
included in the VM.  For example, the javax.annotation packages below.  I
imagine (but don't know for certain) that the javax.annotation packages
include in java 8 would be at version 1.2 or higher, but the framework does
not know that so it just exports them at version 0.0.0.  So even though you
import/export at version 1.2.0 the package still will not be substituted
with the VM package on Java 8.  So we will end up with two exporters of the
annotations package.

Tom





From:   BJ Hargrave/Austin/IBM@IBMUS
To: Equinox development mailing list equinox-dev@eclipse.org
Date:   07/11/2014 09:28 AM
Subject:Re: [equinox-dev] Resolver Problem with guava and   e4
(javax.annotation)
Sent by:equinox-dev-boun...@eclipse.org



Importing what you export is only useful when the bundle contains other
packages which actually use the exported package. For example, a bundle
implements the OSGi Event Admin service. That bundle can export the
org.osgi.service.event package and also import it. The bundle is happy to
use any (version matching) org.osgi.service.event package.

But if the bundle is just a container of packages which it exports for
other and does not itself use the packages in anyway, then there is less
value in also importing the packages. Say a bundle just contains the
org.osgi.service.event package and exports it as well as imports it. If
this bundle is resolved to import the package, the bundle is essentially
empty. It is not exporting the package and has no other packages.

I don't know the make up of the bundles in question here. But is may or may
not make sense to import the packages being exported. What the bundle
contains will influence the choice. That being said, there is little harm
in also importing the packages, so it is a safe (but perhaps of little
value) choice.
--


   
 BJ Hargrave   
 Senior Technical Staff Member, IBM   office: +1 386 848 1781
 OSGi Fellow and CTO of the OSGi Alliance mobile: +1 386 848 3788
 hargr...@us.ibm.com   
   








From:Andreas Sewe andreas.s...@codetrails.com
To:equinox-dev@eclipse.org, orbit-...@eclipse.org
Date:2014/07/11 04:38
Subject:Re: [equinox-dev] Resolver Problem with guava and e4
(javax.annotation)
Sent by:equinox-dev-boun...@eclipse.org



David M Williams wrote:
 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

Is this import what you export best practice for *all* javax.* bundles
in Orbit? As far as I can see, some of them don't follow this policy
(javax.xml.bind, for example, whose packages are also provided by the
system bundle provides at least from Java 7 onwards) and I am wondering
whether it's worth opening bugs for this.

Best wishes,

Andreas

--
Codetrails GmbH
The knowledge transfer company

Robert-Bosch-Str. 7, 64293 Darmstadt
Phone: +49-6151-276-7092
Mobile: +49-170-811-3791
http://www.codetrails.com/

Managing Director: Dr. Marcel Bruch
Handelsregister: Darmstadt HRB 91940
___
equinox-dev mailing list
equinox-dev@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe
from this list, visit
https://dev.eclipse.org/mailman/listinfo/equinox-dev

___
equinox-dev mailing list
equinox-dev@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe
from this list, visit
https://dev.eclipse.org/mailman/listinfo/equinox-dev

___
equinox-dev mailing list
equinox-dev@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/equinox-dev

Re: [equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-07-11 Thread Raymond Auge
That being said, is it not possible to provide a system fragment bundle
which attempts to correct that?:

Fragment-Host: system.bundle
Bundle-RequiredExecutionEnvironment: ?java8[profile]?
Export-Package: javax.annotation;version=1.2,javax.blah;version=x.y.z,..

If we could to that, then a fragment bundle specific per java version could
come along and correct all the packages exported by the system bundle
without having to modify the impl.



On Fri, Jul 11, 2014 at 7:49 AM, Thomas Watson tjwat...@us.ibm.com wrote:

 One clarification on import/export.  If your bundle X is a container
 bundle as BJ describes and it imports/exports the packages AND its imports
 resolve to another bundle then the bundle is effectively empty as BJ
 describes.  But there is one important thing to note about such an empty
 bundle:  Other bundles that happen to require bundle X will now wire to
 the substituted packages that bundle X wires to which replaced/substituted
 the packages declared to be exported by bundle X.

 The other thing to note about this scenario that involves system packages.
  The framework *still* does not know what version to export the packages
 included in the VM.  For example, the javax.annotation packages below.  I
 imagine (but don't know for certain) that the javax.annotation packages
 include in java 8 would be at version 1.2 or higher, but the framework does
 not know that so it just exports them at version 0.0.0.  So even though you
 import/export at version 1.2.0 the package still will not be substituted
 with the VM package on Java 8.  So we will end up with two exporters of the
 annotations package.

 Tom



 [image: Inactive hide details for BJ Hargrave---07/11/2014 09:28:17
 AM---Importing what you export is only useful when the bundle conta]BJ
 Hargrave---07/11/2014 09:28:17 AM---Importing what you export is only
 useful when the bundle contains other  packages which actually use

 From: BJ Hargrave/Austin/IBM@IBMUS
 To: Equinox development mailing list equinox-dev@eclipse.org
 Date: 07/11/2014 09:28 AM

 Subject: Re: [equinox-dev] Resolver Problem with guava and e4
 (javax.annotation)
 Sent by: equinox-dev-boun...@eclipse.org
 --



 Importing what you export is only useful when the bundle contains other
 packages which actually use the exported package. For example, a bundle
 implements the OSGi Event Admin service. That bundle can export the
 org.osgi.service.event package and also import it. The bundle is happy to
 use any (version matching) org.osgi.service.event package.

 But if the bundle is just a container of packages which it exports for
 other and does not itself use the packages in anyway, then there is less
 value in also importing the packages. Say a bundle just contains the
 org.osgi.service.event package and exports it as well as imports it. If
 this bundle is resolved to import the package, the bundle is essentially
 empty. It is not exporting the package and has no other packages.

 I don't know the make up of the bundles in question here. But is may or
 may not make sense to import the packages being exported. What the bundle
 contains will influence the choice. That being said, there is little harm
 in also importing the packages, so it is a safe (but perhaps of little
 value) choice.
 --


*BJ Hargrave*
Senior Technical Staff Member, IBM
OSGi Fellow and CTO of the *OSGi Alliance* http://www.osgi.org/
 *hargr...@us.ibm.com* hargr...@us.ibm.com


 office: +1 386 848 1781
 mobile: +1 386 848 3788




 From:Andreas Sewe andreas.s...@codetrails.com
 To:equinox-dev@eclipse.org, orbit-...@eclipse.org
 Date:2014/07/11 04:38
 Subject:Re: [equinox-dev] Resolver Problem with guava and e4
(javax.annotation)
 Sent by:equinox-dev-boun...@eclipse.org
 --



 David M Williams wrote:
  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

 Is this import what you export best practice for *all* javax.* bundles
 in Orbit? As far as I can see, some of them don't follow this policy
 (javax.xml.bind, for example, whose packages are also provided by the
 system bundle provides at least from Java 7 onwards) and I am wondering
 whether it's worth opening bugs for this.

 Best wishes,

 Andreas

 --
 Codetrails GmbH
 The knowledge transfer company

 Robert-Bosch-Str. 7, 64293 Darmstadt
 Phone: +49-6151-276-7092
 Mobile: +49-170-811-3791
 *http://www.codetrails.com/* http://www.codetrails.com/

 Managing Director: Dr. Marcel Bruch
 Handelsregister: Darmstadt HRB 91940
 ___
 equinox-dev mailing list

Re: [equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-06-11 Thread David M Williams
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-dev@eclipse.org, E4 Project developer mailing list 
e4-...@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

[equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-06-10 Thread Tom Schindl
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-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev


Re: [equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-06-10 Thread Neil Bartlett
a) Removing the javax.annotation import would surely not work, since then you 
won’t have any visibility of that package at all. I assume resolver.problem 
does actually use this package?

b) Modifying Guava would require repackaging it and maintaining that 
indefinitely.

I propose a third solution: import package javax.annotation from your bundle 
but don’t require version 1. The package is after all part of JavaSE since at 
least Java 1.6, and the JRE exports everything as version zero.

Regards,
Neil

On 10 June 2014 at 21:32:06, Tom Schindl (tom.schi...@bestsolution.at) wrote:

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


Re: [equinox-dev] Resolver Problem with guava and e4 (javax.annotation)

2014-06-10 Thread Tom Schindl
On 11.06.14 00:44, Neil Bartlett wrote:
 a) Removing the javax.annotation import would surely not work, since
 then you won’t have any visibility of that package at all. I assume
 resolver.problem does actually use this package?

My proposal was not to remove it but to make it version less but then
this needs to be done by ALL bundles - most important those who process
the javax.annotation (=e4.core.di)

 
 b) Modifying Guava would require repackaging it and maintaining that
 indefinitely.
 

Well we already get that from orbit so it is repackaged

 I propose a third solution: import package javax.annotation from your
 bundle but don’t require version 1. The package is after all part of
 JavaSE since at least Java 1.6, and the JRE exports everything as
 version zero.
 

I can not do that currently because the upstream project e.g. e4.core.di
(see below) require 1.0.0 and then e.g. this package will not call
methods annotated with @PostConstruct!

I guess it would have been best from the beginning if all bundles would
have imported it without a version but it is too late for that now.

e4.core.di/MANIFEST.MF
--
 Manifest-Version: 1.0
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Built-By: e4Build
 Bundle-SymbolicName: org.eclipse.e4.core.di
...
 Import-Package: javax.annotation;version=1.0.0,javax.inject;version=
  1.0.0

Tom
___
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev