Question

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.

Was it helpful?

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!

OTHER TIPS

This is a response to your "How to run a standalone Clojure file in Lein?" you should look at into lein run. I'm not sure the current state but there was a standalone Lein plugin and now there is at least some (maybe all) of the functionality build into lein by default.

Try running a lein help run at the command line for a quick introduction.

Standalone lein-run project. Documentation may be useful. Not 100% sure if it matches up with the built-in lein run but I know from my own usage at least some of it does.

https://github.com/sids/lein-run

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top