I have written up my journeys so far: http://bradfordcross.blogspot.com/2009/04/clojure-build-and-dependency-management.html
I re-used Meikel's ant + ivy successfully. Next step is to get something working for the transative deps , i.e. pulling other clojure projects i depend on and building them and getting the resulting jars and transitive deps on the classpath. Rigth now I jsut pack it all up into jars at the top level lib dir and add that to my swank-extra-classpaths. I have had some good discussions with Meikel Brandmeyer and Phil Hagelberg and things seem to be coming along nicely. I'd like to get things working with ant + ivy xml and so I understand all the issues and then start building out Lancet or something similar so we can script in clojure rather than xml. :-) On Sat, Apr 11, 2009 at 7:06 AM, Meikel Brandmeyer <m...@kotka.de> wrote: > Hi Bradford, > > Am 08.04.2009 um 21:31 schrieb Bradford Cross: > > I heard some chatter yesterday on #clojure about using Ivy with Clojure. >> > > Yes. I'm working on marrying Clojure and Ivy. So far with, IMHO, > great success. I set up a little ivy repo with clojure and contrib. > The clojure module has the following configurations: > > - default => AOT compiled clojure jar > - dev => the previous + a source jar > - slim => Java source compiled, clojure sources as is > > The contrib module has (roughly) one configuration per unit, ie. > def, pprint, stacktrace...., with the following exceptions: > > - I grouped together the scattered math stuff into a math configuration. > - generic and types depend on each other so their combined into > the generic configuration. > > Similar to clojure a source configuration is included, which adds > a source jar to the dependencies > > This allows very fine-grained control of what is needed. So if you want > only def, you only download a 13k not 2.5M. > > To use this setup, you only have to specify the dependencies in > your ivy.xml and ivysettings.xml files. Here an example: > > ivysettings.xml: > <ivysettings> > <include url="${ivy.default.settings.dir}/ivysettings.xml"/> > <include url="http://kotka.de/ivy/ivysettings.xml"/> > </ivysettings> > > The first line sucks in the default configuration, the second tells > Ivy how to resolve the clojure and contrib dependencies. > > ivy.xml: > <ivy-module version="2.0"> > ... <!-- project specific stuff here --> > > <dependencies> > <dependency org="org.clojure" name="clojure-lang" rev="1.0.0" > conf="default"/> > <dependency org="org.clojure" name="clojure-contrib" rev="1.0.0" > conf="default->def"/> > </dependencies> > </ivy-module> > > Now you only have to integrate Ivy with your build system. It can > be done very easily with ant, but may also be used standalone, > eg. with make. > > Here you can see an example how I integrated Ivy with my lazymap project. > > http://bitbucket.org/kotarak/lazymap/src/ > > It is avalaible via the kotka.de ivysettings as > > <dependency org="de.kotka" name="lazymap" rev="2.2.0" conf="default"/> > > I can't speak for SLIME, but VimClojure can be simply started with the > resolved jars from lib directory in the classpath. > > -I download lots of little projects things from github and i want to munge >> them all together for my app. This means I need to build jars (some with >> ant, otehrs with maven, etc.) and in other cases I want to depend directly >> on the .clj files using clojures namespace-to-dir-structure conventions. So >> there are a couple different ways to build of the classpath - one for .clj >> and one for .jar. >> > > I'm not sure, that Ivy can help in the general case, where you have to > build > the dependencies. I think it only downloads the files and makes them > available. > In particular it doesn't seem to handle subdirectories. So vanilla clj > might not > work. > > -Many projects also have their own lib foler - with both jars and cljs, so >> I need to pick those deps up transatively. >> > > This is a breeze with Ivy. It must say, that this just works beautifully. > The > dependencies either work with Ivy or with Maven and are resolved > transitively. > You can also mirror dependencies locally, to make sure they don't go away. > > -The work in the Clojure community is proceeding very fast, so I'd like >> updating all the projects from git to be automated as well. >> > > This could be easily done with Ivy. Check out the dependencies you need. > Add an ivy.xml and a custom build script for ant. Then you can create a > master build.xml, which iterates through all dependencies in the right > order > to pull changes, rebuild and publish into your local repository. > > I actually haven't set up production version of such a structure but I > tried > around and it worked without problems. The Ivy documentation has some > tutorial on this. > > So what is a good solution to these problems? Perhaps it would be cool to >> build some git/maven/lancet aware infrastructure to do this refreshing of >> deps, building the deps, and building up the classpath. It may also be good >> to configure .emacs to be able to load projects and rebuild the classpath >> dynamically based on lancet build files - much in the way that intelliJ or >> eclipse load projects from ant .builds or maven poms. >> > > I'm not sure for bigger setups, but for my current needs Ivy Just Works. So > I think it's certainly worth a look. > > Sincerely > Meikel > > PS: May changes to clojure and contrib are attached as diffs. They add the > Ivy information and a new build+ivy.xml for ant. > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---