Hi,

I am not sure if this actually is a problem, but it might be something to 
watch: If I interpret the latest unique version repo reports 
(http://download.eclipse.org/releases/staging/buildInfo/reporeports/reports/nonUniqueVersions.txt
 
<http://download.eclipse.org/releases/staging/buildInfo/reporeports/reports/nonUniqueVersions.txt>)
 correctly, they seem to indicate that some projects are still pulling in Guava 
12:

com.google.guava
        12.0.0.v201212092141
        15.0.0.v201403281430
It might of course also happen because some lower version bounds are taken too 
literally within the aggregation, but as I haven’t investigated that in detail, 
I thought it would make sense to point that out here.

Cheers
Alexander

> Am 25.03.2015 um 15:42 schrieb Ed Willink <e...@willink.me.uk>:
> 
> Hi
> 
> My specific interests are OCL and QVTd that depend on Xtext that uses Guava, 
> so I have no problem, but my users do.
> 
> 'SimRel products' that would need to recode for Mars under your policy are at 
> least Papyrus and probably BIRT.
> 
> One of Eclipse's good features is that you can just create an added-value 
> product from A and B using the shared infrastructure and the enforced release 
> synchronisation.
> 
> Under your suggested partial wrapper policy, the developers of the 
> added-value product must check all components for 'shared' non-singleton 
> libraries and must choose which of to wrap in order to hide any potential API 
> conflict. I'm not convinced this is always possible, since frameworks often 
> provide call-backs whose API may inhibit wrappers. If your policy was 
> advocated, I would argue for a stronger policy that prohibited any SimRel 
> project from exposing any non-singleton library in its API thereby 
> guaranteeing that A and B are integrateable just as they always used to be. 
> IMHO SimRel requires its components to be generally re-useable. Therefore 
> both A and B must react, not the integrator.
> 
> ---
> 
> You expose a problem with incremental install-time wiring. I'm not familiar 
> with this, but it seems to be a straightforward bug. Installation of C should 
> enforce a rewiring if consistency requires it.
> 
> My theory is based on run-time wiring. I suppose that when application C that 
> integrates A and B starts up, a version of Guava is chosen that suits the 
> uses directives of A, B and C. A and B run with this mutually acceptable 
> version. I assume that another integrating application D might start up and 
> make a different mutually acceptable decision so that a different A and B run 
> with D's version. Maybe my ignorance of Equinox details is showing here. If A 
> and B are singletons and so allow only one run-time as well as only one 
> installation version, then the enfoprcement of a mutually compatible Guava 
> must indeed be done by Equinox install-time wiring.
> 
> ---
> 
> Clarifying why integration may fail.
> 
> case 1: compile time.
> 
> A allows Guava [12..15)
> B allows Guava [16..18)
> 
> An integration by C of both A and B should get a MANIFEST.MF error diagnostic 
> that no mutually compatible version of Guava can ever be found.
> 
> case 2: 'run' time.
> 
> A allows Guava [12..16)
> B allows Guava [15..18)
> Guava 17 is installed.
> 
> An integration by C of both A and B could get a MANIFEST.MF warning 
> diagnostic that no mutually compatible version of Guava is available.
> 
> A launch of C should get a run-time failure because Guava 17 is not suitable, 
> and a diagnostic recommending installation of Guava 15 to solve the problem.
> 
>     Regards
> 
>        Ed Willink
> 
> 
> On 25/03/2015 10:54, Andreas Sewe wrote:
>> Hi Ed,
>> 
>>> On 25/03/2015 10:24, Andreas Sewe wrote:
>>>> Possibly, but being open to third-party plugins, we cannot prevent the
>>>> presence of multiple Guava versions in general.
>>>> 
>>>> Anyway, I think the burden is on the developers of integration bundles
>>>> C. You *can* shield yourself from this problem (A and B both exposing
>>>> Guava in their API) to wrap one of them into facade that does not expose
>>>> Guava in its API.
>>>> 
>>>>    +-- A (exposes X) -- X
>>>>   /
>>>> C
>>>>   \
>>>>    +-- B' -- B (exposes Y) -- Y
>>>> 
>>>> That way, A and B can be wired to different versions of Guava (X and Y,
>>>> respectively) but C can still make use of them both.
>>>> 
>>>> Granted, this is cumbersome, but (given the way OSGi and Equinox work)
>>>> the only solution that is will work in an open ecosystem where *anyone*
>>>> may supply another Guava bundle.
>>>> 
>>> Yes. That could work, but not for Mars because it imposes a new
>>> requirement on all SimRel products that integrate multiple Guava users.
>>> But it severely undermines Eclipse as a useful integration platform.
>> I don't quite understand. What do you mean by "SimRel products". IMHO,
>> the burden is solely with bundles C which depend on multiple bundles A
>> and B that expose Guava in their API. If the developers of C do their
>> homework, then the maintainer of a "SimRel product" (I assume you mean
>> something like ann EPP package) does not have to worry about multiple
>> Guava's being shipped as part of that product.
>> 
>>> IMHO, and I think 'uses' does this, then if A and B announce what they
>>> use, then the class loader for the integrator chooses a jointly
>>> compatible Guava.
>> I thought so, too, but (as Thomas Watson explained [1]) with Equinox
>> this is unfortunately not always the case. Here's the scenario:
>> 
>>  - Bundle A requires either Guava version X or Y
>>  - Bundle B requires Guava version Y
>>  - C requires both A and B.
>> 
>> All bundles have correct uses constraints.
>> 
>>  - A is installed first (causing version X to be installed)
>>  - Equinox wires A to X
>>  - B is installed second (causing version Y to be installed)
>>  - Equinox wires B to Y
>>  - C is installed
>>  - Equinox cannot wire C to A and B *without* requiring A to Y
>> 
>> As Equinox (without "-clean") won't rewire existing bundles, C cannot be
>> resolved, even though a solution exists.
>> 
>> A similar situation arises if C = B, i.e., C both requires Guava itself
>> and a bundle A that exposes Guava in its API. But with three bundles
>> things are easier to explain, even though the two-bundle scenario is
>> probably more common.
>> 
>>> If this fails, most commonly this will be a compile
>>> time version failure because A  and B have no overlap; an integrator's
>>> bug. Rarely it may occur at run-time if no Guava version from the
>>> overlap is available, a user's bug. Both are sensible, diagnosable and
>>> fixable leaving Eclipse as a good flexible integration platform.
>> Sorry, I don't understand what you are saying here. Can you please
>> reword and possibly expand your explanation?
>> 
>> Best wishes,
>> 
>> Andreas
>> 
>> [1] <https://bugs.eclipse.org/bugs/show_bug.cgi?id=438453#c13>
>> 
> 
> _______________________________________________
> cross-project-issues-dev mailing list
> cross-project-issues-dev@eclipse.org
> To change your delivery options, retrieve your password, or unsubscribe from 
> this list, visit
> https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev

--
Dr. Alexander Nyßen
Dipl.-Inform.
Principal Engineer

Telefon: +49 (0) 231 / 98 60-202
Telefax: +49 (0) 231 / 98 60-211
Mobil: +49 (0) 151 /  17396743

http://www.itemis.de
alexander.nys...@itemis.de

itemis AG
Am Brambusch 15-24
44536 Lünen

Rechtlicher Hinweis:

Amtsgericht Dortmund, HRB 20621

Vorstand: Jens Wagener (Vors.), Wolfgang Neuhaus, Dr. Georg Pietrek, Jens 
Trompeter, Sebastian Neus

Aufsichtsrat: Prof. Dr. Burkhard Igel (Vors.), Michael Neuhaus, Jennifer 
Fiorentino



Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

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

Reply via email to