An easy way to set up a full Clojure development environment on OS X
Switch branches/tags
Nothing to show
Pull request Compare This branch is 10 commits behind citizen428:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Easy set up for Clojure on unixoid operating systems.

Supported Platforms

  • Mac OS X 10.5+
  • OpenSolaris
  • Linux (tested on Ubuntu 9.10)
  • Windows (Cygwin)


For a while ClojureX tried to be everything for all people: it downloaded clojure, clojure-contrib and support packages for various editors, compiled and configured them. I now decided to give up on this one-size-fits-all approach and instead focus on always providing the latest stable versions of clojure and clojure-contrib as well as a full-featured "clj" script.

Set Up Instructions

$ git clone git:// 
$ cd ClojureX

To create a symlink for the clj script in /usr/local/bin you can run the following command:

$ bin/create_symlink

If you prefer to create the link somewhere else, you can do it manually like this:

$ ln -s <full path to this project>/clj <destination path>/clj

Note: The clj script expects $JAVA_HOME in its environment. If $JAVA_HOME is not set, it will attempt to determine it for you. If for some reason you cannot provide $JAVA_HOME, you can set the $JAVA variable at the top of the clj script.


The clj command can be used to open an interactive session:

$ clj
Clojure 1.1.0-master-SNAPSHOT

It can be used to run a script:

$ clj test.clj
Hello, Clojure!

Any options following the script will be passed as arguments to the script:

$ clj test.clj a b "c d"
Hello, Clojure!
Arg #1: a
Arg #2: b
Arg #3: c d

Use a shebang line at the start of your script to make a Clojure file executable:

#!/usr/bin/env clj

Of course, you'll also need to enable the script's execute mode (e.g., chmod u+x <scriptname>) to run it this way.

You can also open a debug port using the -d or --debug options:

$ clj -d 1234 test.clj

Additionally, the clj script supports all of clojure.main's command-line options. For example, to evaluate an expression, use -e or --eval. The script's value will be sent to standard output:

$ clj -e "(take 5 (iterate inc 0))"
(0 1 2 3 4)
$ clj --eval '(count "Hello, Clojure")'

Use the -i or --init option to evaluate a clojure script:

$ clj -i test.clj
Hello, Clojure

You can intermix the eval and init options multiple times, and they will be evaluated in the specified order:

$ clj -e '"Before test"' -i test.clj -e '"After test"'
"Before test"
Hello, Clojure!
"After test"

The clj script will exit immediate after processing all the init/eval options. Use -r or --repl to instead start an interactive session.

$ clj -e '"Starting my own REPL"' -r
"Starting my own REPL"

Finally, clj supports all of the java command line options to configure the JVM.

$ clj -d64 -Xms4g -Xmx4g -verbose:gc -i wf2.clj -e '(wf/wf-atoms "O.all")'

To see a full description of clj command-line options, pass it -?, -h, or --help

$ clj --help
Usage: clj ...

Working with Clojure

To add extra jar files to Clojure's classpath on a project-by-project basis, just create a .clojure file in the project's directory. Here's an example:

If your project directory is ~/code/clojure/cafe, you can add the Grinder and Frother jars from the ~/code/clojure/cafe/lib directory by putting their relative paths, separated by a colon, into the .clojure file:

$ cd ~/code/clojure/cafe
$ echo "lib/grinder.jar:lib/frother.jar" > .clojure

You can also list jars one per line in the .clojure file, like so:

$ cd ~/code/clojure/cafe
$ ls -1 lib/*.jar > .clojure


  • Add scripts to work with Clojure projects after installation - Taken care of by Leiningen