When I starting Clojure, I generally point -Djava.ext.dirs
at a "classpaths" directory.  That's where I dump jars,
symlinks to jars, and symlinks to the 'src' and 'classes'
directories of the various projects I have installed.

I know that some people have had trouble with java.ext.dirs
and instead use wildcards in their classpaths or other more
complicated solutions.  But since I've never seen these
problems described in enough detail to reproduce or
troubleshoot, when I stumbled on one tonight I thought it'd
be worth documenting...

Here is the simplest way I've found to produce the error I'm
seeing:

1. Compile clojure-contrib
2. Create a "classpaths" directory with symlink to
   clojure-contrib/classes, so as to add the compiled contrib
   classes to the classpath.  Mine lookes like this:

$ ls -l classpaths/
total 0
lrwxrwxrwx 1 chouser chouser 32 2009-06-27 00:54 classes ->
../proj/clojure-contrib/classes/

3. Start clojure and try to use something from contrib:

java -Djava.ext.dirs=classpaths -cp proj/clojure/clojure.jar clojure.main
user=> (require 'clojure.contrib.math)
java.lang.NoClassDefFoundError: clojure/lang/RT (NO_SOURCE_FILE:0)

The full stack trace for that exception is attached.


I've found two workarounds so far.  Take your pick:

A. Add clojure.jar to the "classpaths" directory.  Once
that's done, it doesn't matter if you also specify it in -cp
on the java command line or not:

$ ls -l classpaths/
total 0
lrwxrwxrwx 1 chouser chouser 32 2009-06-27 00:54 classes ->
../proj/clojure-contrib/classes/
lrwxrwxrwx 1 chouser chouser 27 2009-06-27 01:06 clojure.jar ->
../proj/clojure/clojure.jar

B. Remove the contrib link from "classpaths" and specify it
on the java command line instead:

java -Djava.ext.dirs=classpaths -cp proj/clojure-contrib/classes clojure.main

--Chouser

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

Exception in thread "main" java.lang.NoClassDefFoundError: clojure/lang/RT 
(NO_SOURCE_FILE:0)
        at clojure.lang.Compiler.eval(Compiler.java:4617)
        at clojure.core$eval__4654.invoke(core.clj:1739)
        at clojure.main$eval_opt__6559.invoke(main.clj:223)
        at clojure.main$initialize__6566.invoke(main.clj:242)
        at clojure.main$null_opt__6588.invoke(main.clj:267)
        at clojure.main$main__6608.doInvoke(main.clj:336)
        at clojure.lang.RestFn.invoke(RestFn.java:426)
        at clojure.lang.Var.invoke(Var.java:350)
        at clojure.lang.AFn.applyToHelper(AFn.java:175)
        at clojure.lang.Var.applyTo(Var.java:463)
        at clojure.main.main(main.java:37)
Caused by: java.lang.NoClassDefFoundError: clojure/lang/RT
        at clojure.contrib.math__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at clojure.lang.RT.loadClassForName(RT.java:1521)
        at clojure.lang.RT.load(RT.java:389)
        at clojure.lang.RT.load(RT.java:371)
        at clojure.core$load__5749$fn__5752.invoke(core.clj:3784)
        at clojure.core$load__5749.doInvoke(core.clj:3783)
        at clojure.lang.RestFn.invoke(RestFn.java:413)
        at clojure.core$load_one__5701.invoke(core.clj:3620)
        at clojure.core$load_lib__5722.doInvoke(core.clj:3657)
        at clojure.lang.RestFn.applyTo(RestFn.java:147)
        at clojure.core$apply__3900.doInvoke(core.clj:390)
        at clojure.lang.RestFn.invoke(RestFn.java:443)
        at clojure.core$load_libs__5734.doInvoke(core.clj:3683)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply__3900.doInvoke(core.clj:390)
        at clojure.lang.RestFn.invoke(RestFn.java:443)
        at clojure.core$require__5740.doInvoke(core.clj:3751)
        at clojure.lang.RestFn.invoke(RestFn.java:413)
        at user$eval__1.invoke(NO_SOURCE_FILE:1)
        at clojure.lang.Compiler.eval(Compiler.java:4601)
        ... 10 more
Caused by: java.lang.ClassNotFoundException: clojure.lang.RT
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 32 more

Reply via email to