ztellman / automat

better automata through combinators

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

  1. simple working case: origin/master branch commit
    main namespace works fine when i execute lein clean && lein uberjar && java -jar target/issue-0.1.0-SNAPSHOT-standalone.jar

  2. simple failing one: origin/fails-00 branch commit
    I only add one dep [com.cemerick/url "0.1.1"] and execute again lein clean && lein uberjar && java -jar target/issue-0.1.0-SNAPSHOT-standalone.jar

  3. comenting (:require [automat.core :as a]) fix the problem origin/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