Search code examples
clojurejvmclasspathjvm-languages

Setting CLASSPATH for Clojure project


I have a plain project structure:

Base Dir
   src ;; Pile of Clojure files
   lib ;; Jar files

To export the classpath: $ export CLASSPATH=$CLASSPATH:src:lib/*

Trying to run a Clojure file: java -cp $CLASSPATH -jar lib/clojure.jar src/wizard-game.clj
But I got:

Exception in thread "main" java.io.FileNotFoundException: Could not locate clojure/contrib/trace_init.class or clojure/contrib/trace.clj on classpath:
Caused by: java.io.FileNotFoundException: Could not locate clojure/contrib/trace
_init.class or clojure/contrib/trace.clj on classpath:

Ok, this is a classpath issue but what/where I'm doing wrong?

Is there a better way to try to run it?

UPDATE:
I tried this command:

java -classpath $CLASSPATH clojure.main src/wizard-game.clj

It runs ok now.


Solution

  • From the java man pages regarding the -jar option:

    When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

    So that's a bit of a bummer, but the good news is that you can get around this by using a different launching syntax (referenced at clojure.org):

    java -cp $CLASSPATH clojure.main src/wizard-game.clj
    

    Alternatively, use a tool like Leiningen to manage your project's classpath and dependencies for you!