The JClouds API sucks for this reason. They always return/receive a guava 
collection type rather than just using guava to generate the collections. It’s 
a leaky abstraction nightmare!

Tim

Sent from my iPhone

> On 29 Jan 2018, at 15:58, Ryan Moquin <fragility...@gmail.com> wrote:
> 
> Francois, JB:
> 
> I figured it out shortly after writing this email.  This issue was caused by 
> a combination of a small goof on my side and a misconception on what version 
> of Guava is supported by JClouds.  My goof was that I forgot that in order to 
> programmatically work with JClouds, I had to use a couple Guava classes since 
> JClouds heavily uses it.  As a result of that, my library had an import 
> statement in it's bundle that I forgot about (I was trying to not have to use 
> any Guava stuff, and forgot I couldn't get around it a few days previously).  
> The other part of this was that I thought JClouds had 18.0 - 20.0 set as the 
> valid ranges for Guava, but it's actually 16.0 - 19.0 but since I had 20.0 as 
> the default version in dependency management in my POM, my bundle using 
> JClouds was expecting 20.0 as the only valid version, but JClouds won't wire 
> to that version, hence the error message.  Unfortunately these uses 
> constraint violation errors are very unclear in the majority of cases.  Since 
> this was really about Guava 20.0 being imported by my bundle and JClouds 
> binding to a version 19.0 or below.
> 
>> On Fri, Jan 26, 2018 at 12:35 PM Francois Papon 
>> <francois.pa...@openobject.fr> wrote:
>> Hi Ryan,
>> 
>> Can you share your pom.xml and your feature.xml ?
>> 
>> François
>> 
>>> Le 26/01/2018 à 20:55, Ryan Moquin a écrit :
>>> My bundle depends on an rdf4j bundle which has to use Guava 18.0, and it 
>>> also depends on a bundle that has to use Guava 20.0.  I have it set to 
>>> Guava 20.0 in my rkmoquin common bundle.  I am actually trying to install 
>>> an overall feature which includes some other features.  It had been working 
>>> fine until I added Jclouds to the mix which I think uses a version range 
>>> for Guava.  I guess this is because I have a feature which depends on two 
>>> other features which each depend on different versions of Guava.  The main 
>>> bundle for my feature also uses Guava as a dependency but specifies and 
>>> installs a certain version of it.  It seems like even if my bundle 
>>> specifies a certain version of Guava, because other classes used in that    
>>>      bundle "uses" classes that could bind to other Guava versions, then 
>>> the class space can't be guaranteed to be the same version of Guava 
>>> dependencies (if that makes any sense)?
>>> 
>>> I don't think my bundle has to use Guava 20.0, it was the best version to 
>>> depend on that didn't result in uses constraints with other bundle 
>>> dependencies previously.  Adding JClouds with it's Guava dependency range 
>>> maybe causes uncertainty in the class space?  So guess there could be a mix 
>>> of packages which are in the same class path but "uses" different versions 
>>> of a package. 
>>> 
>>> I can't do a refresh since the feature install fails and then the problem 
>>> bundle isn't installed...I guess if I manually install the dependencies, I 
>>> can then use Karaf to see how it is trying to wire then.  I would think 
>>> this is where making certain dependant features a "prerequisite" might help 
>>> with that, but doing that seems to cause things to go crazy when I try that 
>>> :). I don't think I understand the prerequisite and dependency attributes 
>>> for features.
>>> 
>>> Ryan
>>> 
>>> 
>>> 
>>>> On Fri, Jan 26, 2018 at 10:15 AM Jean-Baptiste Onofré <j...@nanthrax.net> 
>>>> wrote:
>>>> Hi Ryan,
>>>> 
>>>> can you try a refresh ?
>>>> 
>>>> What's your import in the rkmoquin.common bundle ?
>>>> 
>>>> Regards
>>>> JB
>>>> 
>>>> On 01/26/2018 03:40 PM, Ryan Moquin wrote:
>>>> > I keep running into situations where I get a uses constraint, but the 
>>>> > complaint
>>>> > is talking about an import and export chain that involve the exact same
>>>> > dependency, such as with Guava below... why is this a uses constraint 
>>>> > and how do
>>>> > you deal with it?
>>>> >
>>>> > Error executing command: Uses constraint violation. Unable to resolve 
>>>> > resource
>>>> > com.rkmoquin.common [com.rkmoquin.common/1.0.0.SNAPSHOT] because it is 
>>>> > exposed
>>>> > to package 'com.google.common.base' from resources com.google.guava
>>>> > [com.google.guava/20.0.0] and com.google.guava [com.google.guava/20.0.0] 
>>>> > via two
>>>> > dependency chains.
>>>> >
>>>> > Chain 1:
>>>> >   com.rkmoquin.common [com.rkmoquin.common/1.0.0.SNAPSHOT]
>>>> >     import:
>>>> > (&(osgi.wiring.package=com.google.common.base)(version>=20.0.0)(!(version>=21.0.0)))
>>>> >      |
>>>> >     export: osgi.wiring.package: com.google.common.base
>>>> >   com.google.guava [com.google.guava/20.0.0]
>>>> >
>>>> > Chain 2:
>>>> >   com.rkmoquin.common [com.rkmoquin.common/1.0.0.SNAPSHOT]
>>>> >     import:
>>>> > (&(osgi.wiring.package=com.google.common.collect)(version>=20.0.0)(!(version>=21.0.0)))
>>>> >      |
>>>> >     export: osgi.wiring.package: com.google.common.collect;
>>>> > uses:=com.google.common.base
>>>> >     export: osgi.wiring.package=com.google.common.base
>>>> >   com.google.guava [com.google.guava/20.0.0]
>>>> >
>>>> > Thanks for any help!
>>>> > Ryan
>>>> 
>>>> --
>>>> Jean-Baptiste Onofré
>>>> jbono...@apache.org
>>>> http://blog.nanthrax.net
>>>> Talend - http://www.talend.com
>> 

Reply via email to