bhauman / lein-figwheel

Figwheel builds your ClojureScript code and hot loads it into the browser as you are coding!
Eclipse Public License 1.0
2.88k stars 210 forks source link

Guava NoSuchMethodError in sidecar #686

Closed conan closed 6 years ago

conan commented 6 years ago

I've just bumped my ClojureScript to (1.10.238), which pulls in Guava version 22 (via the closure-compiler). When I start using Figwheel-sidecar it now throws an error for me:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)V, compiling:(figwheel_sidecar/repl.clj:1:1)
    at clojure.lang.Compiler.load(Compiler.java:7526)
        ...
    at clojure.main.main(main.java:37)
Caused by: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)V

full stack trace

I'm running it in Cursive in Intellij, using a script that looks like this:

(require '[figwheel-sidecar.repl-api :refer :all])
(start-figwheel!) ;; <-- fetches configuration
(cljs-repl)

It seems Guava has dropped a method signature that maybe Figwheel-sidecar relies upon? I'm not convinced this is a problem with figwheel-sidecar.

conan commented 6 years ago

lein figwheel works fine

bhauman commented 6 years ago

If lein figwheel works fine then there is a dependency conflict happening caused by the classpath you have when you run the script. That or you really need to clean out your target directory.

conan commented 6 years ago

Yes I think you're right, my lein deps :tree looks correct, this must be some kind of build problem (despite many cleans!). I don't think it can be a problem with sidecar.

conan commented 6 years ago

I'm still getting this problem, and lein figwheel is no longer working:

Figwheel: Cutting some fruit, just a sec ...
18-05-14 11:33:53 EF-XPS ERROR [hanabi.core:18] - Uncaught exception on main
                                         clojure.main.main                  main.java:   37
                                                       ...
                                         clojure.main/main                   main.clj:  387
                                         clojure.main/main                   main.clj:  424
                                     clojure.main/null-opt                   main.clj:  345
                                   clojure.main/initialize                   main.clj:  311
                                     clojure.main/init-opt                   main.clj:  280
                                  clojure.main/load-script                   main.clj:  278
                                                       ...
                                            user/eval26747                  REPL Input
                                                       ...
                                      clojure.core/require                   core.clj: 5947 (repeats 2 times)
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                    clojure.core/load-libs                   core.clj: 5909
                                    clojure.core/load-libs                   core.clj: 5925
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                     clojure.core/load-lib                   core.clj: 5868
                                     clojure.core/load-lib                   core.clj: 5887
                                  clojure.core/load-lib/fn                   core.clj: 5888
                                     clojure.core/load-one                   core.clj: 5848
                                                       ...
                                         clojure.core/load                   core.clj: 6029
                                         clojure.core/load                   core.clj: 6045
                                      clojure.core/load/fn                   core.clj: 6046
                                                       ...
                       figwheel-sidecar.repl-api/eval26885               repl_api.clj:    1
       figwheel-sidecar.repl-api/eval26885/loading--auto--               repl_api.clj:    1
                                                       ...
                                      clojure.core/require                   core.clj: 5947 (repeats 2 times)
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                    clojure.core/load-libs                   core.clj: 5909
                                    clojure.core/load-libs                   core.clj: 5925
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                     clojure.core/load-lib                   core.clj: 5868
                                     clojure.core/load-lib                   core.clj: 5887
                                  clojure.core/load-lib/fn                   core.clj: 5888
                                     clojure.core/load-one                   core.clj: 5848
                                                       ...
                                         clojure.core/load                   core.clj: 6029
                                         clojure.core/load                   core.clj: 6045
                                      clojure.core/load/fn                   core.clj: 6046
                                                       ...
                         figwheel-sidecar.system/eval35980                 system.clj:    1
         figwheel-sidecar.system/eval35980/loading--auto--                 system.clj:    1
                                                       ...
                                      clojure.core/require                   core.clj: 5947 (repeats 2 times)
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                    clojure.core/load-libs                   core.clj: 5909
                                    clojure.core/load-libs                   core.clj: 5925
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                     clojure.core/load-lib                   core.clj: 5868
                                     clojure.core/load-lib                   core.clj: 5887
                                  clojure.core/load-lib/fn                   core.clj: 5888
                                     clojure.core/load-one                   core.clj: 5848
                                                       ...
                                         clojure.core/load                   core.clj: 6029
                                         clojure.core/load                   core.clj: 6045
                                      clojure.core/load/fn                   core.clj: 6046
                                                       ...
                           figwheel-sidecar.repl/eval35986                   repl.clj:    1
           figwheel-sidecar.repl/eval35986/loading--auto--                   repl.clj:    1
                                                       ...
                                      clojure.core/require                   core.clj: 5947 (repeats 2 times)
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                    clojure.core/load-libs                   core.clj: 5909
                                    clojure.core/load-libs                   core.clj: 5925
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                     clojure.core/load-lib                   core.clj: 5868
                                     clojure.core/load-lib                   core.clj: 5887
                                  clojure.core/load-lib/fn                   core.clj: 5888
                                     clojure.core/load-one                   core.clj: 5848
                                                       ...
                                         clojure.core/load                   core.clj: 6029
                                         clojure.core/load                   core.clj: 6045
                                      clojure.core/load/fn                   core.clj: 6046
                                                       ...
                                   java.lang.Class.forName                 Class.java:  348
                                  java.lang.Class.forName0                  Class.java
                                  cljs.repl__init.<clinit>
                                      cljs.repl__init.load                           :    9
                                 cljs.repl/loading--auto--                  repl.cljc:    9
                                                       ...
                                      clojure.core/require                   core.clj: 5947 (repeats 2 times)
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                    clojure.core/load-libs                   core.clj: 5909
                                    clojure.core/load-libs                   core.clj: 5925
                                        clojure.core/apply                   core.clj:  659
                                                       ...
                                     clojure.core/load-lib                   core.clj: 5868
                                     clojure.core/load-lib                   core.clj: 5887
                                  clojure.core/load-lib/fn                   core.clj: 5888
                                     clojure.core/load-one                   core.clj: 5848
                                                       ...
                                         clojure.core/load                   core.clj: 6029
                                         clojure.core/load                   core.clj: 6045
                                      clojure.core/load/fn                   core.clj: 6046
                                                       ...
                                   java.lang.Class.forName                 Class.java:  348
                                  java.lang.Class.forName0                  Class.java
                               cljs.closure__init.<clinit>
                                   cljs.closure__init.load                           :  105
    com.google.javascript.jscomp.DiagnosticGroups.<clinit>      DiagnosticGroups.java:  492
com.google.javascript.jscomp.ClosureRewriteModule.<clinit>  ClosureRewriteModule.java:  201
                       com.google.javascript.rhino.IR.name                    IR.java:  386
            java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)V
clojure.lang.Compiler$CompilerException: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)V, compiling:(figwheel_sidecar/repl.clj:1:1)

Subprocess failed
conan commented 6 years ago
[amazonica "0.3.121" :exclusions [[com.amazonaws/aws-java-sdk] [com.amazonaws/amazon-kinesis-client]]]
[com.amazonaws/dynamodb-streams-kinesis-adapter "1.2.1" :exclusions [[com.amazonaws/amazon-kinesis-client] [com.amazonaws/aws-java-sdk-cloudwatch] [com.amazonaws/aws-java-sdk-dynamodb] [com.amazonaws/aws-java-sdk-kinesis] [joda-time]]]
[com.taoensso/nippy "2.12.2"]
  [net.jpountz.lz4/lz4 "1.3"]
  [org.iq80.snappy/snappy "0.4"]
  [org.tukaani/xz "1.5"]
[joda-time "2.9.6"]
[org.clojure/algo.generic "0.1.2"]
[robert/hooke "1.3.0"]
[binaryage/devtools "0.9.10" :scope "test"]
[binaryage/env-config "0.2.2" :scope "test"]
[cheshire "5.8.0"]
[com.fasterxml.jackson.core/jackson-core "2.9.0"]
[com.fasterxml.jackson.dataformat/jackson-dataformat-cbor "2.9.0"]
[com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.9.0"]
[tigris "0.1.1"]
[clj-http "3.9.0"]
[commons-codec "1.11" :exclusions [[org.clojure/clojure]]]
[commons-io "2.6" :exclusions [[org.clojure/clojure]]]
[org.apache.httpcomponents/httpasyncclient "4.1.3" :exclusions [[org.clojure/clojure]]]
  [org.apache.httpcomponents/httpcore-nio "4.4.6"]
[org.apache.httpcomponents/httpclient-cache "4.5.5" :exclusions [[org.clojure/clojure]]]
[org.apache.httpcomponents/httpclient "4.5.5" :exclusions [[org.clojure/clojure]]]
[org.apache.httpcomponents/httpcore "4.4.9" :exclusions [[org.clojure/clojure]]]
[org.apache.httpcomponents/httpmime "4.5.5" :exclusions [[org.clojure/clojure]]]
[potemkin "0.4.5" :exclusions [[org.clojure/clojure]]]
  [clj-tuple "0.2.2"]
  [riddley "0.1.12"]
[slingshot "0.12.2" :exclusions [[org.clojure/clojure]]]
[clj-time "0.14.3"]
[cljs-http "0.1.45"]
[com.cognitect/transit-cljs "0.8.239"]
  [com.cognitect/transit-js "0.8.846"]
[noencore "0.3.3"]
[org.clojure/core.async "0.3.442"]
  [org.clojure/tools.analyzer.jvm "0.7.0"]
    [org.clojure/core.memoize "0.5.9"]
      [org.clojure/core.cache "0.6.5"]
        [org.clojure/data.priority-map "0.0.7"]
    [org.clojure/tools.analyzer "0.6.9"]
    [org.ow2.asm/asm-all "4.2"]
[clojure-complete "0.2.4" :exclusions [[org.clojure/clojure]]]
[com.amazonaws/aws-java-sdk-core "1.11.320"]
[com.fasterxml.jackson.core/jackson-databind "2.6.7.1"]
  [com.fasterxml.jackson.core/jackson-annotations "2.6.0"]
[commons-logging "1.1.3"]
[software.amazon.ion/ion-java "1.0.2"]
[com.amazonaws/aws-java-sdk-dynamodb "1.11.320"]
[com.amazonaws/jmespath-java "1.11.320"]
[com.amazonaws/aws-java-sdk-s3 "1.11.320"]
[com.amazonaws/aws-java-sdk-kms "1.11.320"]
[com.cemerick/url "0.1.1"]
[pathetic "0.5.0"]
[com.cognitect/transit-clj "0.8.309"]
[com.cognitect/transit-java "0.8.332"]
  [org.msgpack/msgpack "0.6.12"]
    [com.googlecode.json-simple/json-simple "1.1.1" :exclusions [[junit]]]
    [org.javassist/javassist "3.18.1-GA"]
[com.datomic/datomic-pro "0.9.5697"]
[com.datomic/datomic-lucene-core "3.3.0"]
[com.google.guava/guava "18.0"]
[com.h2database/h2 "1.3.171"]
[net.spy/spymemcached "2.11.4"]
[org.apache.activemq/artemis-core-client "1.4.0" :exclusions [[org.jgroups/jgroups] [commons-logging]]]
  [io.netty/netty-all "4.0.39.Final"]
  [org.apache.activemq/artemis-commons "1.4.0"]
    [commons-beanutils "1.9.2"]
      [commons-collections "3.2.1"]
    [org.jboss.logging/jboss-logging "3.3.0.Final"]
  [org.apache.geronimo.specs/geronimo-json_1.0_spec "1.0-alpha-1"]
  [org.apache.johnzon/johnzon-core "0.9.4"]
[org.apache.tomcat/tomcat-jdbc "7.0.27" :exclusions [[commons-logging]]]
  [org.apache.tomcat/tomcat-juli "7.0.27"]
[org.clojure/tools.cli "0.3.5" :exclusions [[org.clojure/clojure]]]
[org.codehaus.janino/commons-compiler-jdk "2.6.1"]
  [org.codehaus.janino/commons-compiler "2.6.1"]
[org.fressian/fressian "0.6.5"]
[org.slf4j/jcl-over-slf4j "1.7.7"]
[org.slf4j/jul-to-slf4j "1.7.7"]
  [org.slf4j/slf4j-api "1.7.7"]
[org.slf4j/log4j-over-slf4j "1.7.7" :scope "runtime"]
[org.slf4j/slf4j-nop "1.7.7"]
[com.taoensso/timbre "4.10.0"]
[com.taoensso/encore "2.91.0"]
  [com.taoensso/truss "1.5.0"]
[io.aviso/pretty "0.1.33"]
[environ "1.1.0"]
[expound "0.6.0" :scope "test"]
[figwheel-sidecar "0.5.16" :scope "test"]
[clj-stacktrace "0.2.8" :scope "test"]
[co.deps/ring-etag-middleware "0.2.0" :scope "test"]
[com.stuartsierra/component "0.3.2" :scope "test"]
  [com.stuartsierra/dependency "0.2.0" :scope "test"]
[figwheel "0.5.16" :scope "test" :exclusions [[org.clojure/tools.reader]]]
[hawk "0.2.11" :scope "test" :exclusions [[org.clojure/clojure]]]
  [net.incongru.watchservice/barbary-watchservice "1.0" :scope "test"]
    [net.java.dev.jna/jna "3.2.2" :scope "test"]
[ring-cors "0.1.12" :scope "test" :exclusions [[ring/ring-core] [org.clojure/clojure]]]
[simple-lein-profile-merge "0.1.4" :scope "test"]
[strictly-specking-standalone "0.1.1" :scope "test"]
  [net.cgrand/parsley "0.9.3" :scope "test" :exclusions [[org.clojure/clojure]]]
    [net.cgrand/regex "1.1.0" :scope "test"]
  [net.cgrand/sjacket "0.1.1" :scope "test" :exclusions [[org.clojure/clojure] [net.cgrand/parsley]]]
[suspendable "0.1.1" :scope "test" :exclusions [[org.clojure/clojure] [com.stuartsierra/component]]]
[fogus/ring-edn "0.3.0"]
[http-kit "2.3.0"]
[io.rkn/conformity "0.5.1"]
[listora/again "0.1.0"]
[metosin/reitit "0.1.1-20180514.053641-10"]
[metosin/reitit-core "0.1.1-20180514.053437-11"]
  [meta-merge "1.0.0"]
[metosin/reitit-ring "0.1.1-20180514.053459-10"]
[metosin/reitit-schema "0.1.1-20180514.053537-10"]
  [metosin/schema-tools "0.10.2"]
    [prismatic/schema "1.1.9"]
[metosin/reitit-spec "0.1.1-20180514.053519-10"]
  [metosin/spec-tools "0.7.0-20180514.052931-2"]
[metosin/reitit-swagger-ui "0.1.1-20180514.053617-1"]
  [metosin/jsonista "0.2.0"]
    [com.fasterxml.jackson.datatype/jackson-datatype-jsr310 "2.9.5"]
    [org.ow2.asm/asm "5.1"]
    [virgil "0.1.6"]
  [metosin/ring-swagger-ui "2.2.10"]
[metosin/reitit-swagger "0.1.1-20180514.053557-10"]
[metosin/ring-http-response "0.9.0"]
[mount "0.1.12"]
[orchestra "2017.11.12-1" :scope "test"]
[org.clojure/clojure "1.9.0"]
[org.clojure/core.specs.alpha "0.1.24"]
[org.clojure/spec.alpha "0.1.143"]
[org.clojure/clojurescript "1.10.238"]
[com.google.javascript/closure-compiler-unshaded "v20180204"]
  [args4j "2.33"]
  [com.google.code.findbugs/jsr305 "3.0.1"]
  [com.google.code.gson/gson "2.7"]
  [com.google.errorprone/error_prone_annotations "2.0.18"]
  [com.google.javascript/closure-compiler-externs "v20180204"]
  [com.google.jsinterop/jsinterop-annotations "1.0.0"]
  [com.google.protobuf/protobuf-java "3.0.2"]
[org.clojure/data.json "0.2.6"]
[org.clojure/google-closure-library "0.0-20170809-b9c14c6b"]
  [org.clojure/google-closure-library-third-party "0.0-20170809-b9c14c6b"]
[org.clojure/tools.reader "1.3.0-alpha3"]
[org.mozilla/rhino "1.7R5"]
[org.clojure/test.check "0.9.0"]
[org.clojure/tools.namespace "0.2.11" :scope "test"]
[org.clojure/tools.nrepl "0.2.12" :exclusions [[org.clojure/clojure]]]
[prismatic/dommy "1.1.0"]
[re-frame "0.10.5"]
[net.cgrand/macrovich "0.2.0"]
[org.clojure/tools.logging "0.3.1"]
[reagent-utils "0.3.1"]
[reagent "0.8.0"]
[cljsjs/create-react-class "15.6.2-0"]
[cljsjs/react-dom-server "16.3.0-1"]
[cljsjs/react-dom "16.3.0-1"]
[cljsjs/react "16.3.0-1"]
[ring/ring-core "1.6.3"]
[commons-fileupload "1.3.3"]
[crypto-equality "1.0.0"]
[crypto-random "1.2.0"]
[ring/ring-codec "1.0.1"]
[ring/ring-defaults "0.3.1"]
[javax.servlet/javax.servlet-api "3.1.0"]
[ring/ring-anti-forgery "1.1.0"]
  [hiccup "1.0.5"]
[ring/ring-headers "0.3.0"]
[ring/ring-ssl "0.3.0"]
[ring/ring-spec "0.0.4"]
[secretary "1.2.3"]
[com.cemerick/clojurescript.test "0.2.3-20140317.141743-3"]
[tick "0.3.5"]
conan commented 6 years ago

An upgrade to 0.5.16 of sidecar seems to have introduced the problem

conan commented 6 years ago

It's always related to guava. There seems to be an API difference between 18 and 20+ that breaks things

conan commented 6 years ago

Running a clj REPL is fine, it's when I fire up a figwheel REPL that the problem shows up

aaronblenkush commented 5 years ago

I had this issue too after upgrading some dependencies in a project. I ran lein deps :tree and looked for anything that depended on Google Guava. I found that one of the dependencies (Google Sheets API) was using com.google.guava/guava-jdk5.

The resolution is to add an exclusion in the Leiningen project.clj:

[com.google.apis/google-api-services-sheets "v4-rev483-1.22.0" 
 :exclusions [com.google.guava/guava-jdk5]]