I haven't actually run across this before, but I suspect someone else has. I was curious how people handle it.
Suppose you have your project A, and it uses Leiningen (the issue is more widely applicable, but for the sake of example).
* A depends on some version of library B, which in turn depends on library Z version 2
* A also depends on some version of library C, which in turn depends on library Z version 3
Simple case 1: B also works with Z v3, so update its dependency, use Z v3, and everything works. (similarly easy if Z v2 works for C)
Hard case: B only works with Z v2, and C only works with Z v3.
Is there a straightforward way to load in both versions of Z to a single JVM, and make everything work?
Perhaps this is the kind of situation that Gradle, OSGi, and probably other tools/frameworks are meant to help address?