Leiningen is a tool for building Clojure code, downloading jars, handling java classpaths, and in general gluing all those ugly-but-necessary development details together into a coherent whole.
Leiningen runs on maven, so it is theoretically able to do anything that maven can do. In practice, Leiningen is still under development so this statement hasn’t been fully proven yet, but it should handle most small and medium-sized projects with relative ease.
Let’s walk through a typical example of managing a project with leiningen.
Creating a Project
Leiningen provides a simple way of creating a structure of a project. Let’s walk through a simple application called “fahr” that converts temperatures between Fahrenheit and Celsius.
cd ~/clj/src/
lein new fahr
That created a directory structure under the new directory ‘fahr’ that looks like this:
.
|-- project.clj
|-- README
|-- src
| `-- fahr
| `-- core.clj
`-- test
`-- fahr
`-- test
`-- core.clj
Now let’s get in the new directory and add version control:
cd fahr
git init
git add project.clj src/fahr/core.clj test/fahr/test/core.clj
git commit
Before we can start swank, we need to edit the project.clj file to contain the line:
:dev-dependencies [[swank-clojure "1.2.1"]]
And then run:
lein deps
lein swank
Finally, we can connect to it from inside emacs by pressing:
M-x slime-connect
Happy Hacking!
Testing your code
Every time you start Leiningen, a JVM is created, Leiningen does its work, and then the JVM is destroyed. If you want to avoid this heavy startup cost, you may want to run it in interactive mode, as I do.
lein interactive
This is especially handy during development when you just type in ‘test’ repeatedly to quickly check how your code is progressing.
Distributing your code
If you want to build an ‘uberjar’, a package that contains the application and also clojure’s jar files as well, you can use the following:
cd ~/clj/src/
lein deps
lein compile
lein uberjar
When people want to run your application, now all they have to do is
java -jar fahr-standalone.jar
Alternatives
If leiningen was not to your liking, you may try cake, gradle, maven, or polyglot maven.
Resources:
January 26th, 2011 on 1:13 am
Thank you. It’s so simple when you have a good tutorial.