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 <[email protected]>:
>
> 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
> [email protected]
> 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
[email protected]
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
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ cross-project-issues-dev mailing list [email protected] To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
