We have some very, very complex projects that bring in boat-loads of
dependencies, some of which will have version conflicts, if left
unchecked.  I've created a Leiningen plugin, vizdeps, to make it easier to
see the artifact tree, identify and repair conflicts, and determine why any
particular artifacts are in the build.

https://github.com/walmartlabs/vizdeps

On Mon, Mar 13, 2017 at 1:45 PM, Stuart Sierra <the.stuart.sie...@gmail.com>
wrote:

> This is a well-known problem in the JVM world, not just Clojure.
>
> The most common approach is: Always use the latest versions, and don't
> break backwards-compatibility.
>
> Most open-source Java and Clojure libraries are careful about not breaking
> backwards-compatibility. So in general, you're safe choosing the latest
> version of any library.
>
> Leiningen has the `:pedantic` option which can be set to warn or fail when
> there are possible dependency conflicts.
>
> Neither Clojure nor the JVM has explicit support for linking to specific
> versions of a library. Work-arounds exist, but they often increase overall
> complexity and lead to conflicts which are harder to debug.
>
> –S
>
>
> On Monday, March 13, 2017 at 4:13:19 PM UTC-4, arthur wrote:
>>
>> Hello All,
>>
>>
>>      I have a general inquiry regarding conflicting dependencies in
>> Clojure projects and how they affect applications at runtime. I believe
>> this is a common problem faced by many languages in this day and age where
>> we try not to reinvent the wheel by depending on the work of others.
>> Basically: my application depends on libraries *A*, *B*, *C*, and *D*.
>> Libraries *B*, *C*, *D* *also* depend on library *A*, but all of us
>> depend on *different versions* of library *A.* Leiningen thankfully
>> warns us in many of these situations by suggesting exclusions. However, how
>> can I possibly know that something hasn't broken? Stringent testing can
>> give a certain degree of confidence that things are still working, but it
>> would seem to me that to ensure correctness, we should include *all* versions
>> of the dependencies and have the functions link to their respective
>> *versioned* identites. Does anyone have advice on how they solve these
>> kinds of problems on their codebases in the wild? Thankfully nothing has
>> broken yet (to my knowledge), but it seems we have very few assurances here
>> and the best we can do is *hope* nothing is broken. Any advice is much
>> appreciated.
>>
>> Thanks,
>>
>> Arthur
>>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Howard M. Lewis Ship

Senior Mobile Developer at Walmart Labs

Creator of Apache Tapestry

(971) 678-5210
http://howardlewisship.com
@hlship

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to