Hi Robert,
If you are familiar with the architecture, perhaps you can give me some hints where to intervene. The behavior I want is:
Assume I load a system at top-level and sprinkled in it or its dependencies there are a number of :mvn-modules as described earlier. During preparation, the dependencies, exclusions, and managed-dependencies are collected at the level of the top-level system. Then, before any lisp or other files are loaded a single call is made to compute the combined maven dependencies and they are resolved and added to the classpath. Finally the rest of the load goes as it usually does, although the :mvn-module components compile and loads are no-ops since their work has already been done up-front.
Thanks, Alan
On Fri, Apr 7, 2017 at 5:48 PM, Robert Goldman rpgoldman@sift.net wrote:
On 4/7/17 Apr 7 -4:06 PM, Alan Ruttenberg wrote:
On Fri, Apr 7, 2017 at 4:27 PM, Alan Ruttenberg <alanruttenberg@gmail.com mailto:alanruttenberg@gmail.com> wrote:
It doesn't address what to do about potentially conflicting maven artifacts loaded by distinct asdf systems.
Here's one approach.
:managed-dependencies are specifications of versions that should take precedence over versions that are in the transitive closure of some dependency.
As each asdf system which has used maven dependencies computes its set of satisfying dependencies, the particular versions chosen become default managed-dependencies for subsequent systems. If two managed dependencies conflict (e.g. I include a version 1.1 as managed dependency in system A, which is loaded. Subsequently system B specifies version 1.2 as a managed dependency, then an error is signaled. Many times this can be fixed by modifying the specification of the managed dependency to be looser, and changing the order of loaded
systems.
I think moving this into the planning phase is probably the right thing. I'm just not familiar enough with asdf's model to whip up a solution. Hopefully asdf's planning runs over all systems that are depended on before loading anything, in which case I think this will be a viable solution, module the case of conflicting managed dependencies, or dependency hell you would arrive at if you were using maven alone.
Yes, ASDF has a "plan, then execute" model of operation, so it won't load anything until inspecting all the systems involved.