hi all -- i am running a clojure based library (cascalog) on top of
hadoop. i started getting errors on loading a class with the follow
stack trace:

Caused by: java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.ClassNotFoundException: views.visit-facts, compiling:(views/
visit_facts.clj:1)
        at cascalog.Util.tryRequire(Util.java:61)
        at cascalog.Util.bootSimpleFn(Util.java:65)
        at cascalog.Util.bootFn(Util.java:72)
        at cascalog.ClojureCascadingBase.prepare(ClojureCascadingBase.java:
52)
        ...
Caused by: java.lang.RuntimeException:
java.lang.ClassNotFoundException: views.visit-facts, compiling:(views/
visit_facts.clj:1)
        at clojure.lang.Compiler.analyze(Compiler.java:6235)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3503)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6411)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$TryExpr$Parser.parse(Compiler.java:2091)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5008)
        at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3629)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6407)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3452)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6411)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5008)
        at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3629)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6407)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.eval(Compiler.java:6462)
        at clojure.lang.Compiler.eval(Compiler.java:6455)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.RT.loadResourceScript(RT.java:357)
        at clojure.lang.RT.loadResourceScript(RT.java:348)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:398)
        at clojure.core$load$fn__4791.invoke(core.clj:5386)
        at clojure.core$load.doInvoke(core.clj:5385)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5200)
        at clojure.core$load_lib.doInvoke(core.clj:5237)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$load_libs.doInvoke(core.clj:5271)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$require.doInvoke(core.clj:5352)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.lang.Var.invoke(Var.java:401)
        at cascalog.Util.tryRequire(Util.java:51)
        ... 50 more
Caused by: java.lang.RuntimeException:
java.lang.ClassNotFoundException: views.visit-facts
        at clojure.lang.Util.runtimeException(Util.java:165)
        at clojure.lang.RT.classForName(RT.java:2017)
        at clojure.lang.Compiler.resolveIn(Compiler.java:6701)
        at clojure.lang.Compiler.resolve(Compiler.java:6664)
        at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6625)
        at clojure.lang.Compiler.analyze(Compiler.java:6198)
        ... 98 more
Caused by: java.lang.ClassNotFoundException: views.visit-facts
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:
61)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at clojure.lang.RT.classForName(RT.java:2013)

the ns statement of this class looks like

(ns views.visit-facts
  (:use {some classes})
  (:require {some classes}])
  (:gen-class))

this class is AOT compiled into an uberjar, everything is turned into
underscores

jar -tvf my-jar-standalone.jar | grep visit_facts
...
  1791 Thu May 03 16:01:40 EDT 2012 views/visit_facts.class
 15270 Thu May 03 16:01:40 EDT 2012 views/visit_facts__init.class
  9594 Sun Apr 29 18:36:56 EDT 2012 views/visit_facts.clj

a lot of other classes i have in this jar also use hyphens in the ns
and there are no issues whatsoever, but it just seems like this one
sees this issue where its trying to lookup the classname by the
hyphens instead of underscore? i am a clojure n00b and i am not really
sure how that all works.

here is the code for tryRequire (the method at the top of the stack
trace)

    public static void tryRequire(String ns_name) {
        try {
            require.invoke(symbol.invoke(ns_name));
        } catch (Exception e) {

            //if playing from the repl and defining functions, file
won't exist
            Throwable rootCause = getRootCause(e);

            boolean fileNotFound = (rootCause instanceof
FileNotFoundException);
            boolean nsFileMissing = e.getMessage().contains(ns_name +
".clj on classpath");

            if (!(fileNotFound && nsFileMissing))
                throw new RuntimeException(e);
        }
    }

any insight would be really appreciated -- at what point does clojure
do the hyphen to underscore conversion and what sort of circumstances
might break that?

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

Reply via email to