Hi Jan,
My 2c: Leiningen is an important step, but there is still plenty to do.
My workflow: I am developing multiple Clojure libraries and
applications, with some of the dependencies changing daily. Whenever I
want to make a change, I:
In the project being changed:
git tag a new version number
update the project.clj to a new version number
run "lein pom" and "lein jar"
copy the new files to a repos (clojars)
In projects that depend on changed project
update the dependency in project.clj (if it is hard coded and not >=)
run lein deps
This seems adequate to me (although there could be a bit more
automation). The problem of snapshot dependencies remains. The
solution that springs to mind here is to get projects off snapshots
(presumably by releasing more incremental versions). Library authors:
please release lots of versions! (or tell me why this is a bad idea).
Some needs I see:
(0) More point releases of key libs (or some other solution to the
snapshots problem)
(1) Unify around the project structure imposed by lein, and/or
(2) Improve the project structure imposed by lein, if it is broken in
some specific way. (Maybe add a well-known config file for adding
elements to the classpath?)
(3) "lein deps" (or some other task) to clean up old jars. Right now I
am deleting them by hand from the lib directory. (Is this already
solved?)
Stu
I haven't hacked on new Clojure stuff for the past two months or
so. Now, having updated my repositories, I find that everybody just
dropped ant and moved to leiningen.
I tried to make sense of things, but can't. I must be missing
something
big here.
It seems that leiningen assumes that you are building an
application. It
downloads all dependencies and can build an uberjar for you. That's
great, but what if what I have is a bunch of libraries, all being
developed and modified?
Also, I now have at least six clojure jars in ~/.m2 (huh?!), along
with
a collection of other assorted stuff. I don't want to use any of these
clojure jars, I have a checked out git repo with clojure and this is
the
only code I want to run. Also, swank-clojure insists on having its own
clojure jar in ~/.swank-clojure (why?).
I used to have a bunch of directories with git repos. I would update
those, run ant to gather code into jars, fiddle with the classpath
in my
custom-crafted clj script, symlink things around. It was about as
bad as
with Common Lisp. But now things got worse -- I no longer feel in
control of anything. Some things won't build, lein tells me about
"artifacts" (huh?!), things get installed in weird places. My clj
script
that gets run by SLIME form Emacs can't find libraries that leiningen
downloaded.
How do people deal with this?
As a more general observation, I think that a large part of Perl's and
Python's success was a unified way of dealing with libraries. There
are certain directories where you can drop libraries and expect them
to
work (be found). There is ONE way of running the VM (one script,
blessed
by the language creator). Then on top of that there is CPAN, which
plugs
into that, downloading dependencies and dropping libraries into those
well-known directories. It isn't perfect, but it works, and is
predictable.
Shouldn't we have a well-known Single Setup for Clojure as well?
I am very worried that Clojure is rapidly going the Common Lisp way,
with each developer having his own precious carefully crafted
setup. Every system is different, everyone uses a different script to
run clojure programs, there is no single place to drop your libraries
into, and libraries have no conventions on where their code is (what
do
I add to classpath once I have a library checked out?). I thought
Leiningen was supposed to solve these issues, but either I am missing
something, or it is really a tool to manage dependencies for a single
application.
--J.
--
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 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