ant-ivy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nascif Abousalh-Neto" <>
Subject Best Practices for Version Convergence
Date Wed, 15 Aug 2007 19:57:44 GMT
One of the features that attracted me to Ivy was the possibility to
switch between dynamic and fixed versions. While dynamic versions can
help you to keep your code always integrated with the latest and
greatest from your dependencies (specially if backed up by a Continuous
Integration server), a static version can protect you from a buggy new
version and allow you some stability to develop a new feature while your
dependency is churning.

But I got worried after a conversation with a friend from a large
company, which told me that they gave up on using static versions
because they would never converge. Complex products typically have many
"diamond-shape" subgraphs embedded in their dependency graphs, which
creates lateral dependencies that are hard if not impossible to catch
locally. Even if you can detect them early by using tools that can
pinpoint the affected areas in the dependency graph, they are still hard
to solve if they cross team boundaries.

For example: let's say we have the following dependency graph, where all
components are supported by different teams:
A -> B
A -> C
A -> D

B -> E
C -> E
D -> E

When using a "strict" conflict manager, A will only be able to resolve
succesfully if B, C and D are using the same versions of E. Getting them
all to agree on using the same version might not be trivial - and
meanwhile A is stuck on its previous working configuration.

I don't like the idea of using other, more flexible conflict managers
because they create configurations that were not validated by the
dependency teams. So if B was published using an old version of E, I
don't think it is a good idea to allow A->B->E with the latest version
of E - it might result in unpredictable behavior in A's runtime.

Using dynamic versions ('latest.*') would prevent this problem but it
denies the advantage of using Ivy to create a stable (if temporary)
environment for development.

Has anybody working on a similar scenario faced this issue? Any advise
or suggestion? 

View raw message