<div dir="ltr">Here's a (perhaps hacky) fix for the moment. <div><a href="https://github.com/alanruttenberg/abcl/commit/fab11a1b35ff143ed28d4c2f08f4fcff0d304c62">https://github.com/alanruttenberg/abcl/commit/fab11a1b35ff143ed28d4c2f08f4fcff0d304c62</a><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Lets me write:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra"><font face="monospace, monospace">(asdf:defsystem owl2libs-mvn2</font></div><div class="gmail_extra"><font face="monospace, monospace"> :description "Non-Lisp dependencies necessary for OWL to function."</font></div><div class="gmail_extra"><font face="monospace, monospace"> :components</font></div><div class="gmail_extra"><font face="monospace, monospace"> ((:mvn-module "maven"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>:dependencies </font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>("net.sourceforge.owlapi/pellet-cli-ignazio1977/2.4.0-ignazio1977"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "org.semanticweb.elk/elk-reasoner/0.4.3"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "net.sourceforge.owlapi/org.semanticweb.hermit/1.3.8.413"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "net.sourceforge.owlapi/owlapi-distribution/4.2.6"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "net.sourceforge.owlapi/owlexplanation/2.0.0"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "de.sciss/prefuse-core/1.0.1"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "de.sciss/prefuse-demos/1.0.1")</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>:managed-dependencies</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>("org.slf4j/slf4j-api/1.7.21"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "net.sourceforge.owlapi:owlapi-distribution:4.2.6")</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>:exclusions</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>("net.sourceforge.owlapi:owlapi-osgidistribution"</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> "edu.stanford.protege:org.protege.editor.owl"))</font></div><div class="gmail_extra"><font face="monospace, monospace"> (:module rest :pathname "lib" :components</font></div><div class="gmail_extra"><font face="monospace, monospace"> ((:jar-file "factplusplus-1.6.4-SNAPSHOT")</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> (:jar-file "LSWTreeview-1.0.0")</font></div><div class="gmail_extra"><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre"> </span> (:jar-file "QuotedStringAnnotationVisitor-1.0.0")))</font></div><div class="gmail_extra"><font face="monospace, monospace"> (:module lib :pathname "lib"</font></div><div class="gmail_extra"><font face="monospace, monospace"> :depends-on ("maven" rest))))</font></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">It doesn't address what to do about potentially conflicting maven artifacts loaded by distinct asdf systems.</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 7, 2017 at 11:50 AM, Alan Ruttenberg <span dir="ltr"><<a href="mailto:alanruttenberg@gmail.com" target="_blank">alanruttenberg@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I'm using :mvn ASDF components and ran into a problem with having multiple versions of the same library. The issue boils down to the fact that ABCL currently processes dependencies for :mvn components one at a time, which doesn't take into account mutual dependencies. Attached is a function resolve-multiple-<wbr>maven-dependencies, which takes a set of maven components and computes the dependencies. As an example, here is a comparison of treating the dependencies individually vs at once.<div><br></div><div><div>(length (mapcan 'resolve-multiple-maven-<wbr>dependencies</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> '(("net.sourceforge.owlapi:<wbr>owlapi-distribution:4.2.6")</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> ("net.sourceforge.owlapi:org.<wbr>semanticweb.hermit:1.3.8.413")</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> ("org.semanticweb.elk/elk-<wbr>reasoner/0.4.3")</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> ("net.sourceforge.owlapi/<wbr>pellet-cli-ignazio1977/2.4.0-<wbr>ignazio1977")</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> ("net.sourceforge.owlapi/<wbr>owlexplanation/2.0.0"))))</div><div>-> 210</div></div><div><br></div><div><div>(length (mapcan 'resolve-multiple-maven-<wbr>dependencies</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> '(("net.sourceforge.owlapi:<wbr>owlapi-distribution:4.2.6"</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> "net.sourceforge.owlapi:org.<wbr>semanticweb.hermit:1.3.8.413"</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> "org.semanticweb.elk/elk-<wbr>reasoner/0.4.3"</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> "net.sourceforge.owlapi/<wbr>pellet-cli-ignazio1977/2.4.0-<wbr>ignazio1977"</div><div><span class="gmail-m_-717849282999983767gmail-Apple-tab-span" style="white-space:pre-wrap"> </span> "net.sourceforge.owlapi/<wbr>owlexplanation/2.0.0"))))</div></div><div><br></div><div>-> 90</div><div><br></div><div>In particular there are several versions of owlapi-distribution that are put on the classpath. Which one is actually used is not easily predictable. In my case even though I specified version 4.2.6 in my system definition, 4.1.3 was actually used. </div><div><br></div><div>The attached code also has features not yet supported by the :mvn syntax that are really needed: The ability to override versions of a particular dependency that a downstream dependency specifies, and the ability to exclude certain artifacts altogether.</div><div><br></div><div>Mark has suggested that the maven resolution could be moved to the ASDF planning stage, which sounds like a good idea. However there is still an issue regarding maven dependencies in different loaded ASDF systems. One idea is to remember dependencies across systems and then uses them as constraints on subsequent maven resolutions. </div><div><br></div><div>Comments and ideas would be appreciated.</div><span class="gmail-HOEnZb"><font color="#888888"><div><br></div><div>Alan</div></font></span></div>
</blockquote></div><br></div></div>