I've been noodling on the problem of dependency management for a while
now. It's definitely a pain point for projects with more than a couple
dependencies. Currently our approach has been to use maven, but that
involves a fair amount of arcane knowledge as well as writing a bunch of
XML, which isn't a lot of fun. But there's been a community consensus
that any dependency tool needs to be able to leverage all the valuable
stuff out there that's currently in maven repositories.

I've put together a proof-of-concept dependency manager called
Corkscrew. It uses Maven under the hood as well as offering dependencies
on source packages stored in git or subversion. A simple project.clj
file lays out the dependencies and other project info:

    {:name "my-sample"
     :version "1.0"
     :dependencies [["tagsoup" "1.2" "org.ccil.cowan.tagsoup"]
                    ;; group defaults to name
                    ["rome" "0.9"]]
     :source-dependencies [["clojure-contrib" "r663" :svn
                            "http://clojure-contrib.googlecode.com/svn/trunk";]
                           ["enlive" "95b2558943f50bb9962fe7d500ede353f1b578f0"
                            :git "git://github.com/cgrand/enlive.git"]]}

You can install it with:

  $ git clone git://github.com/technomancy/corkscrew.git
  $ cd corkscrew
  $ ./install
  $ cp bin/corkscrew /somewhere/on/your/path

Create a project.clj file in your project root based on the one
above. Then you can use "corkscrew deps" to set everything up for
you. At that point just make sure your classpath includes
target/dependency/ and you should be good to go.

It's simple, but it solves the main problems that I've been having with
more complicated projects. I'd love to get some opinions on it.

The biggest issue right now is that it runs Maven as a subprocess rather
than using the Java API in the same VM because I can't make head or tail
of the Maven Java API (it uses plexus.core), but shelling out works as a
proof-of-concept even if it's tacky.

-Phil

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to