java -jar standalone.jar throws ExceptionInInitializerError - Caused by: j.l.ClassCastException: c.l.Var$Unbound cannot be cast to clojure.lang.MultiFn
tangrammer opened this issue · comments
I'm a bit lost having this problem only when i tried my app using the uberjar generated using lein uberjar
The error says ...
Caused by: java.lang.ClassCastException: clojure.lang.Var$Unbound cannot be cast to clojure.lang.MultiFn
(perhaps) Could be related with my AOT project.clj
config???
:main roc.platform.main
:aot [roc.platform.main
#"roc\.platform\.*"
#"roc\.[a-z]+$"]
the output error ...
$ java -jar target/roc-0.1.0-SNAPSHOT-standalone.jar
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:344)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForName(RT.java:2177)
at clojure.lang.RT.loadClassForName(RT.java:2196)
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:419)
at clojure.core$load$fn__5677.invoke(core.clj:5893)
at clojure.core$load.invokeStatic(core.clj:5892)
at clojure.core$load.doInvoke(core.clj:5876)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5697)
at clojure.core$load_one.invoke(core.clj:5692)
at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
at clojure.core$load_lib.invokeStatic(core.clj:5736)
at clojure.core$load_lib.doInvoke(core.clj:5717)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$load_libs.invokeStatic(core.clj:5774)
at clojure.core$load_libs.doInvoke(core.clj:5758)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$require.invokeStatic(core.clj:5796)
at clojure.core$require.doInvoke(core.clj:5796)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at automat.compiler.core$loading__5569__auto____14606.invoke(core.cljc:1)
at automat.compiler.core__init.load(Unknown Source)
at automat.compiler.core__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:344)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForName(RT.java:2177)
at clojure.lang.RT.loadClassForName(RT.java:2196)
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:419)
at clojure.core$load$fn__5677.invoke(core.clj:5893)
at clojure.core$load.invokeStatic(core.clj:5892)
at clojure.core$load.doInvoke(core.clj:5876)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5697)
at clojure.core$load_one.invoke(core.clj:5692)
at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
at clojure.core$load_lib.invokeStatic(core.clj:5736)
at clojure.core$load_lib.doInvoke(core.clj:5717)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$load_libs.invokeStatic(core.clj:5774)
at clojure.core$load_libs.doInvoke(core.clj:5758)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$require.invokeStatic(core.clj:5796)
at clojure.core$require.doInvoke(core.clj:5796)
at clojure.lang.RestFn.invoke(RestFn.java:482)
at automat.viz$loading__5569__auto____14604.invoke(viz.clj:1)
at automat.viz__init.load(Unknown Source)
at automat.viz__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:344)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForName(RT.java:2177)
at clojure.lang.RT.loadClassForName(RT.java:2196)
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:419)
at clojure.core$load$fn__5677.invoke(core.clj:5893)
at clojure.core$load.invokeStatic(core.clj:5892)
at clojure.core$load.doInvoke(core.clj:5876)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5697)
at clojure.core$load_one.invoke(core.clj:5692)
at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
at clojure.core$load_lib.invokeStatic(core.clj:5736)
at clojure.core$load_lib.doInvoke(core.clj:5717)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$load_libs.invokeStatic(core.clj:5774)
at clojure.core$load_libs.doInvoke(core.clj:5758)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$require.invokeStatic(core.clj:5796)
at clojure.core$require.doInvoke(core.clj:5796)
at clojure.lang.RestFn.invoke(RestFn.java:619)
at roc.auto$loading__5569__auto____14602.invoke(auto.clj:1)
at roc.auto__init.load(Unknown Source)
at roc.auto__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:344)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForName(RT.java:2177)
at clojure.lang.RT.loadClassForName(RT.java:2196)
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:419)
at clojure.core$load$fn__5677.invoke(core.clj:5893)
at clojure.core$load.invokeStatic(core.clj:5892)
at clojure.core$load.doInvoke(core.clj:5876)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5697)
at clojure.core$load_one.invoke(core.clj:5692)
at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
at clojure.core$load_lib.invokeStatic(core.clj:5736)
at clojure.core$load_lib.doInvoke(core.clj:5717)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$load_libs.invokeStatic(core.clj:5774)
at clojure.core$load_libs.doInvoke(core.clj:5758)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$require.invokeStatic(core.clj:5796)
at clojure.core$require.doInvoke(core.clj:5796)
at clojure.lang.RestFn.invoke(RestFn.java:1289)
at roc.platform.system$loading__5569__auto____24062.invoke(system.clj:1)
at roc.platform.system__init.load(Unknown Source)
at roc.platform.system__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:344)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForName(RT.java:2177)
at clojure.lang.RT.loadClassForName(RT.java:2196)
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:419)
at clojure.core$load$fn__5677.invoke(core.clj:5893)
at clojure.core$load.invokeStatic(core.clj:5892)
at clojure.core$load.doInvoke(core.clj:5876)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5697)
at clojure.core$load_one.invoke(core.clj:5692)
at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
at clojure.core$load_lib.invokeStatic(core.clj:5736)
at clojure.core$load_lib.doInvoke(core.clj:5717)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$load_libs.invokeStatic(core.clj:5774)
at clojure.core$load_libs.doInvoke(core.clj:5758)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$require.invokeStatic(core.clj:5796)
at clojure.core$require.doInvoke(core.clj:5796)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$eval145.invokeStatic(NO_SOURCE_FILE:7)
at clojure.core$eval145.invoke(NO_SOURCE_FILE:7)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.eval(Compiler.java:6916)
at clojure.lang.Compiler.eval(Compiler.java:6890)
at clojure.core$eval.invokeStatic(core.clj:3105)
at clojure.core$eval.invoke(core.clj:3101)
at roc.platform.main$_main.invokeStatic(main.clj:6)
at roc.platform.main$_main.doInvoke(main.clj:4)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at roc.platform.main.main(Unknown Source)
Caused by: java.lang.ClassCastException: clojure.lang.Var$Unbound cannot be cast to clojure.lang.MultiFn
at automat.fsm__init.load(Unknown Source)
at automat.fsm__init.<clinit>(Unknown Source)
... 150 more
Thanks in advance for this great lib!
You might try adding automat to your AOT compilation, or just do :aot :all
, which is what I always do.
Hi Zach
Adding :aot :all
didn't fix the error yet so I was investigating a bit trying to isolate the problem so maybe could be more fixable now
I uploaded a minimal project here https://github.com/tangrammer/automat-issue
It has 3 branchs trying to be easier to test every odd isolated case
-
simple working case:
origin/master
branch commit
main namespace works fine when i executelein clean && lein uberjar && java -jar target/issue-0.1.0-SNAPSHOT-standalone.jar
-
simple failing one:
origin/fails-00
branch commit
I only add one dep[com.cemerick/url "0.1.1"]
and execute againlein clean && lein uberjar && java -jar target/issue-0.1.0-SNAPSHOT-standalone.jar
-
comenting
(:require [automat.core :as a])
fix the problemorigin/now-works
branch commit
Removing/comenting the automat namespace required fix the problem
(Following this odd trick i don't know how to use the lib in other namespaces )
Thanks a lot again!
Searching for this problem in the context of clojurescript i found this discussion that links to this CLJ-1591
Symbol not being bound in namespace when name clashes with clojure.core
BTW: error happens with other deps like [bidi "1.21.0"]
or [selmer "0.9.4"]
or [cljs-react-material-ui "0.2.37"]
Including error got when compiling issue.hola.clj
CompilerException java.lang.ExceptionInInitializerError, compiling:(/Users/tangrammer/git/ride-on/issue/src/issue/hola.clj:2:1)
clojure.lang.Compiler.load (Compiler.java:7391)
issue.core/eval10716 (form-init1581929879224297307.clj:1)
issue.core/eval10716 (form-init1581929879224297307.clj:1)
clojure.lang.Compiler.eval (Compiler.java:6927)
clojure.lang.Compiler.eval (Compiler.java:6890)
clojure.core/eval (core.clj:3105)
clojure.core/eval (core.clj:3101)
clojure.main/repl/read-eval-print--7408/fn--7411 (main.clj:240)
clojure.main/repl/read-eval-print--7408 (main.clj:240)
clojure.main/repl/fn--7417 (main.clj:258)
clojure.main/repl (main.clj:258)
clojure.main/repl (main.clj:174)
Caused by:
ExceptionInInitializerError
java.lang.Class.forName0 (Class.java:-2)
java.lang.Class.forName (Class.java:344)
clojure.lang.RT.classForName (RT.java:2168)
clojure.lang.RT.classForName (RT.java:2177)
clojure.lang.RT.loadClassForName (RT.java:2196)
clojure.lang.RT.load (RT.java:443)
clojure.lang.RT.load (RT.java:419)
clojure.core/load/fn--5677 (core.clj:5893)
clojure.core/load (core.clj:5892)
clojure.core/load (core.clj:5876)
clojure.core/load-one (core.clj:5697)
clojure.core/load-one (core.clj:5692)
Caused by:
ClassCastException clojure.lang.Var$Unbound cannot be cast to clojure.lang.MultiFn
automat.fsm__init.load (:841)
automat.fsm__init.<clinit> (:-1)
java.lang.Class.forName0 (Class.java:-2)
java.lang.Class.forName (Class.java:344)
@deprecated comment ... just realised that bidi [bidi "1.21.0"]
uses [com.cemerick/url "0.1.1"]
that i previously noted that is a dep failing one
@ztellman maybe this info could help too
bidi 2.1.1 => works
:dependencies [[org.clojure/clojure "1.8.0"]
[automat "0.2.2"]
[bidi "2.1.1"]]
bidi 1.21.0 fails
:dependencies [[org.clojure/clojure "1.8.0"]
[automat "0.2.2"]
[bidi "1.21.0"]]
https://github.com/juxt/bidi/blob/1.21.0/project.clj
really sorry for the noise but i'm really in trouble deploying prod app :()
If anyone could point me any reasons to start with solving this issue i'll really appreciate it
Thanks again
Hi again,
looking at deps and nested deps I realised that clojurescript was always present in problematic libs . I' tried to avoid the problem adding org.clojure/clojurescript
to exclusions and surprisingly it fixed the problem
:exclusions [org.clojure/clojurescript]
I also had to remove clojurescript from :dependencies
vector :!
Feel free to close the issue if you think the error doesn't relate to automat
thanks and sorry for so much noise!
I've moved this problem to #68