magomimmo / modern-cljs

A series of tutorials on ClojureScript
2.92k stars 288 forks source link

Tutorial1 - Class not found Exception #444

Open colonelrascals opened 6 years ago

colonelrascals commented 6 years ago

exception below

$ - boot cljs target
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by dynapath.defaults$fn__1516$fn__1517 (file:/Users/user/.m2/repository/boot/pod/2.7.2/pod-2.7.2.jar) to method java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of dynapath.defaults$fn__1516$fn__1517
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Writing main.cljs.edn...
Compiling ClojureScript...
• main.js
                                       java.lang.Thread.run                        Thread.java:  844
         java.util.concurrent.ThreadPoolExecutor$Worker.run            ThreadPoolExecutor.java:  635
          java.util.concurrent.ThreadPoolExecutor.runWorker            ThreadPoolExecutor.java: 1135
                        java.util.concurrent.FutureTask.run                    FutureTask.java:  264
                                                        ...
                        clojure.core/binding-conveyor-fn/fn                           core.clj: 1938
                              adzerk.boot-cljs/compile-1/fn                      boot_cljs.clj:  126
                                   adzerk.boot-cljs/compile                      boot_cljs.clj:   66
                                          boot.pod/call-in*                            pod.clj:  413
                                                        ...
   jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke  DelegatingMethodAccessorImpl.java:   43
       jdk.internal.reflect.NativeMethodAccessorImpl.invoke      NativeMethodAccessorImpl.java:   62
      jdk.internal.reflect.NativeMethodAccessorImpl.invoke0       NativeMethodAccessorImpl.java
org.projectodd.shimdandy.impl.ClojureRuntimeShimImpl.invoke        ClojureRuntimeShimImpl.java:  102
org.projectodd.shimdandy.impl.ClojureRuntimeShimImpl.invoke        ClojureRuntimeShimImpl.java:  109
                                                        ...
                                          boot.pod/call-in*                            pod.clj:  410
                                      boot.pod/eval-fn-call                            pod.clj:  357
                                                        ...
                                       clojure.core/require                           core.clj: 5796 (repeats 2 times)
                                         clojure.core/apply                           core.clj:  648
                                                        ...
                                     clojure.core/load-libs                           core.clj: 5758
                                     clojure.core/load-libs                           core.clj: 5774
                                         clojure.core/apply                           core.clj:  648
                                                        ...
                                      clojure.core/load-lib                           core.clj: 5717
                                      clojure.core/load-lib                           core.clj: 5736
                                   clojure.core/load-lib/fn                           core.clj: 5737
                                      clojure.core/load-one                           core.clj: 5697
                                                        ...
                                          clojure.core/load                           core.clj: 5876
                                          clojure.core/load                           core.clj: 5892
                                       clojure.core/load/fn                           core.clj: 5893
                                                        ...
                               adzerk.boot-cljs.impl/eval23                           impl.clj:    1
               adzerk.boot-cljs.impl/eval23/loading--auto--                           impl.clj:    1
                                                        ...
                                       clojure.core/require                           core.clj: 5796 (repeats 2 times)
                                         clojure.core/apply                           core.clj:  648
                                                        ...
                                     clojure.core/load-libs                           core.clj: 5758
                                     clojure.core/load-libs                           core.clj: 5774
                                         clojure.core/apply                           core.clj:  648
                                                        ...
                                      clojure.core/load-lib                           core.clj: 5717
                                      clojure.core/load-lib                           core.clj: 5736
                                   clojure.core/load-lib/fn                           core.clj: 5737
                                      clojure.core/load-one                           core.clj: 5697
                                                        ...
                                          clojure.core/load                           core.clj: 5876
                                          clojure.core/load                           core.clj: 5892
                                       clojure.core/load/fn                           core.clj: 5893
                                                        ...
                                    cljs.build.api/eval2173                            api.clj:    8
                    cljs.build.api/eval2173/loading--auto--                            api.clj:    8
                                                        ...
                                       clojure.core/require                           core.clj: 5796 (repeats 2 times)
                                         clojure.core/apply                           core.clj:  648
                                                        ...
                                     clojure.core/load-libs                           core.clj: 5758
                                     clojure.core/load-libs                           core.clj: 5774
                                         clojure.core/apply                           core.clj:  648
                                                        ...
                                      clojure.core/load-lib                           core.clj: 5717
                                      clojure.core/load-lib                           core.clj: 5736
                                   clojure.core/load-lib/fn                           core.clj: 5737
                                      clojure.core/load-one                           core.clj: 5697
                                                        ...
                                          clojure.core/load                           core.clj: 5876
                                          clojure.core/load                           core.clj: 5892
                                       clojure.core/load/fn                           core.clj: 5893
                                                        ...
                                      cljs.closure/eval3402                        closure.clj:    9
                      cljs.closure/eval3402/loading--auto--                        closure.clj:    9
                                                        ...
                                    java.lang.Class.forName                         Class.java:  374
                                   java.lang.Class.forName0                          Class.java
                            java.lang.ClassLoader.loadClass                   ClassLoader.java:  499
                                                        ...
                            java.lang.ClassLoader.loadClass                   ClassLoader.java:  566
                                                        ...
                          java.net.URLClassLoader.findClass                URLClassLoader.java:  466
       java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
clojure.lang.Compiler$CompilerException: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter, compiling:(cljs/closure.clj:1:1)
             clojure.lang.ExceptionInfo: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter, compiling:(cljs/closure.clj:1:1)
    line: 11
tirkarthi commented 6 years ago

Are you using JDK 9? It's an error specific to JDK 9 as I can see from the stacktrace. It should work on JDK8. Can you add the info regarding java -version ?

tirkarthi commented 6 years ago

You can try adding the jvm opts to resolve this in JDK 9 if you cannot switch to JDK 8. Refer : https://github.com/http-kit/http-kit/issues/356#issuecomment-340307541 and https://www.deps.co/blog/how-to-upgrade-clojure-projects-to-use-java-9/

colonelrascals commented 6 years ago

@tirkarthi

 java -version
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)
tirkarthi commented 6 years ago

Thanks. You can try switching to JDK 8 for now or add the jvm-opts as mentioned. I am still not sure about the dependency that causes this error.

nouse commented 6 years ago

I can fix this problem with adding environment variable, BOOT_JVM_OPTIONS="--add-modules=java.xml.bind" but adding that to .boot/boot.properties doesn't work

kuwze commented 6 years ago

I fixed this by adding [org.clojure/clojurescript "1.10.238"] before [adzerk/boot-cljs "2.1.4"].

So I went from:

(set-env!
 :source-paths #{"src/cljs"}
 :resource-paths #{"html"}

 :dependencies '[[adzerk/boot-cljs "2.1.4"]])

(require '[adzerk.boot-cljs :refer [cljs]])

to:

(set-env!
 :source-paths #{"src/cljs"}
 :resource-paths #{"html"}

 :dependencies '[[org.clojure/clojurescript "1.10.238"]
                    [adzerk/boot-cljs "2.1.4"]])

(require '[adzerk.boot-cljs :refer [cljs]])

I also tried your suggestion nouse and couldn't fix it by adding that line to boot.properties.

gunar commented 6 years ago

Whoah, nice. Still had to do this but now it's working.

phi1ipp commented 5 years ago

Just to confirm that the suggested solution to change dependencies to

 :dependencies '[[org.clojure/clojurescript "1.10.238"]
                    [adzerk/boot-cljs "2.1.4"]])

works for java 11 as well

z3t0 commented 5 years ago

Just for clarification, is the solution to use a newer version of cljs?

colonelrascals commented 5 years ago

looks like it

gloorfindel commented 4 years ago

To fix (this and future tutorial issues) I updated dependencies to include http-kit, cider/piggieback,nrepl and other dependency versions.

  :dependencies '[[http-kit "2.3.0"]
  [org.clojure/clojure "1.10.0"]
  [org.clojure/clojurescript "1.10.238"]
  [adzerk/boot-cljs "2.1.5"]
  [pandeiro/boot-http "0.8.3"]
  [org.clojure/tools.nrepl "0.2.12"] ;;required in order to make boot-http works
  [adzerk/boot-reload "0.6.0"]
  [adzerk/boot-cljs-repl "0.4.0"]
  [com.cemerick/piggieback "0.2.2"]
  [weasel "0.7.0"]
  [cider/piggieback "0.3.9" :scope "test"]
  [nrepl "0.4.5" :scope "test"]])

Also note one needs to update boot.properties like below:

#Wed Feb 22 16:15:15 CET 2017
BOOT_CLOJURE_NAME=org.clojure/clojure
BOOT_CLOJURE_VERSION=1.10.0
BOOT_VERSION=2.8.2