I'm pleased to announce the initial release of Leiningen.

Leiningen is a build tool for Clojure designed to not set your hair on fire.

Building Clojure projects with tools designed for Java can be an
exercise in frustration. If you use Ant, you end up copying around a
lot of the same tasks around between XML files on all your projects;
there's a lot of repetition. Maven avoids repetition, but provides
very little transparency into what's really going on behind the scenes
and forces you to become a Maven expert to script a nontrivial
build. Either way you end up writing far more XML than is necessary.

With Leiningen, your build is described using Clojure. You can put any
code you like in your project.clj file; the only requirement is that
it includes a call to defproject. You can define your own tasks in
there if you need to, but the majority of projects should be able to
get by on the tasks that are provided with Leiningen. If you do find a
common task that you need to add, you can implement it as a plugin
rather than copying and pasting among each of your projects.

Projects are defined with Clojure syntax, (not XML!) in project.clj:

    (defproject leiningen "0.5.0"
      :description "A build tool designed not to set your hair on fire."
      :main leiningen.core
      :dependencies [[org.clojure/clojure "1.1.0-alpha-SNAPSHOT"]
                     [org.clojure/clojure-contrib "1.0-SNAPSHOT"]
                     [ant/ant-launcher "1.6.2"]
                     [org.apache.maven/maven-ant-tasks "2.0.10"]]
      :dev-dependencies [[org.clojure/swank-clojure "1.0"]])


A number of tasks are provided:

    $ lein deps # install dependencies in lib/

    $ lein test [PRED] # run the project's tests, optionally filtered on PRED

    $ lein compile # ahead-of-time compile into classes/

    $ lein repl # launch a REPL with the project classpath configured

    $ lein clean # remove all build artifacts

    $ lein jar # create a jar of the project

    $ lein uberjar # create a standalone jar that contains all dependencies

    $ lein pom # output a pom.xml file for interop with Maven

    $ lein install # install in local repo (currently requires mvn)

    $ lein help [TASK] # show a list of tasks or help for a given TASK

Leiningen is extensible, you can define new tasks in project.clj or in
plugins. Add your plugin as a dev-dependency of your project, and you'll
be able to call "lein $YOUR_COMMAND". See the lein-swank directory for
an example of a plugin.

To install simply download the shell script, place it somewhere on your
$PATH, and run "lein self-install":

  http://github.com/technomancy/leiningen/raw/master/bin/lein

Many people have expressed frustration at trying to use a tool designed
for Java with their Clojure projects, especially when dealing with
dependencies. I hope this can move things forward and ease the
pain. Note that it's still a very young project, (started about two
weeks ago), but in classic Clojure fashion it is able to leverage a lot
of functionality from other JVM tools.

Please try it out and let me know how it works for your project!

thanks,
Phil

Bonus: Leiningen also integrates with the Clojars open-source
clojure-specific repository coming soon at http://clojars.org.

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