taoensso / sente

Realtime web comms library for Clojure/Script
https://www.taoensso.com/sente
Eclipse Public License 1.0
1.74k stars 193 forks source link

java.lang.RuntimeException: No such var: encore/keys= #74

Closed byw closed 10 years ago

byw commented 10 years ago

Hi,

I'm getting an error when requiring sente in a clj namespace declaration:

clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: No such var: encore/keys=, compiling:(taoensso/sente.clj:170:5)

This happens with both 1.0.0 and 1.1.0, on clojure 1.6.0.

Seeing that no one else is having this issue, it might be something stupid on my part.

Any pointer is appreciated!

ptaoussanis commented 10 years ago

Hi Bobby, it sounds like you may have a dependency conflict.

Could you show me the output of your lein deps :tree? For Sente v1.1.0 you'll need to see that [com.taoensso/encore "1.8.1"] is being pulled in correctly.

I might also try lein clean; lein cljsbuild clean; first just in case any build artefacts have become inconsistent somehow.

Cheers! :-)

byw commented 10 years ago

Ah, you're right! I was using an older version of timbre that overrode encore version. Bumped to the latest and it's working fine now.

Thanks very much! :)

ericnormand commented 10 years ago

Hi Peter,

I'm still having this trouble. Here's my output.

portal $ lein clean; lein cljsbuild clean; lein deps :tree
Deleting files generated by lein-cljsbuild.
Possibly confusing dependencies found:
[cider/cider-nrepl "0.7.0"] -> [org.clojure/java.classpath "0.2.0" :exclusions [org.clojure/clojure]]
 overrides
[ring/ring-devel "1.3.1"] -> [ns-tracker "0.2.2"] -> [org.clojure/java.classpath "0.2.2"]

Consider using these exclusions:
[ring/ring-devel "1.3.1" :exclusions [org.clojure/java.classpath]]

[org.clojure/clojurescript "0.0-2322"] -> [org.clojure/tools.reader "0.8.4"]
 overrides
[com.taoensso/sente "1.1.0"] -> [com.taoensso/timbre "3.3.1"] -> [com.taoensso/encore "1.8.1"] -> [org.clojure/tools.reader "0.8.8"]
 and
[com.taoensso/sente "1.1.0"] -> [com.taoensso/encore "1.8.1"] -> [org.clojure/tools.reader "0.8.8"]
 and
[com.taoensso/sente "1.1.0"] -> [org.clojure/tools.reader "0.8.8"]
 and
[clj-http "1.0.0"] -> [org.clojure/tools.reader "0.8.5" :exclusions [org.clojure/clojure]]

Consider using these exclusions:
[com.taoensso/sente "1.1.0" :exclusions [org.clojure/tools.reader]]
[com.taoensso/sente "1.1.0" :exclusions [org.clojure/tools.reader]]
[com.taoensso/sente "1.1.0" :exclusions [org.clojure/tools.reader]]
[clj-http "1.0.0" :exclusions [org.clojure/tools.reader]]

[cheshire "5.3.1"] -> [com.fasterxml.jackson.core/jackson-core "2.3.1"]
 overrides
[clj-http "1.0.0"] -> [com.cognitect/transit-clj "0.8.247" :exclusions [org.clojure/clojure]] -> [com.cognitect/transit-java "0.8.257"] -> [com.fasterxml.jackson.datatype/jackson-datatype-json-org "2.3.2"] -> [com.fasterxml.jackson.core/jackson-databind "2.3.2"] -> [com.fasterxml.jackson.core/jackson-core "2.3.2"]
 and
[clj-http "1.0.0"] -> [com.cognitect/transit-clj "0.8.247" :exclusions [org.clojure/clojure]] -> [com.cognitect/transit-java "0.8.257"] -> [com.fasterxml.jackson.datatype/jackson-datatype-json-org "2.3.2"] -> [com.fasterxml.jackson.core/jackson-core "2.3.2"]

Consider using these exclusions:
[clj-http "1.0.0" :exclusions [com.fasterxml.jackson.core/jackson-core]]
[clj-http "1.0.0" :exclusions [com.fasterxml.jackson.core/jackson-core]]

warn
 [cheshire "5.3.1"]
   [com.fasterxml.jackson.core/jackson-core "2.3.1"]
   [com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.3.1"]
   [tigris "0.1.1"]
 [cider/cider-nrepl "0.7.0"]
   [cljs-tooling "0.1.3" :exclusions [[org.clojure/clojure]]]
   [compliment "0.1.3" :exclusions [[org.clojure/clojure]]]
   [org.clojure/java.classpath "0.2.0" :exclusions [[org.clojure/clojure]]]
   [org.clojure/tools.namespace "0.2.5" :exclusions [[org.clojure/clojure]]]
   [org.clojure/tools.trace "0.7.8" :exclusions [[org.clojure/clojure]]]
   [org.tcrawley/dynapath "0.2.3" :exclusions [[org.clojure/clojure]]]
 [clj-http "1.0.0"]
   [com.cognitect/transit-clj "0.8.247" :exclusions [[org.clojure/clojure]]]
     [com.cognitect/transit-java "0.8.257"]
       [com.fasterxml.jackson.datatype/jackson-datatype-json-org "2.3.2"]
         [com.fasterxml.jackson.core/jackson-databind "2.3.2"]
           [com.fasterxml.jackson.core/jackson-annotations "2.3.0"]
       [org.apache.directory.studio/org.apache.commons.codec "1.8"]
       [org.msgpack/msgpack "0.6.10"]
         [com.googlecode.json-simple/json-simple "1.1.1" :exclusions [[junit]]]
         [org.javassist/javassist "3.18.1-GA"]
   [commons-codec "1.9" :exclusions [[org.clojure/clojure]]]
   [commons-io "2.4" :exclusions [[org.clojure/clojure]]]
   [crouton "0.1.2" :exclusions [[org.clojure/clojure]]]
     [org.jsoup/jsoup "1.7.1"]
   [org.apache.httpcomponents/httpclient "4.3.5" :exclusions [[org.clojure/clojure]]]
     [commons-logging "1.1.3"]
   [org.apache.httpcomponents/httpcore "4.3.2" :exclusions [[org.clojure/clojure]]]
   [org.apache.httpcomponents/httpmime "4.3.5" :exclusions [[org.clojure/clojure]]]
   [potemkin "0.3.8" :exclusions [[org.clojure/clojure]]]
     [clj-tuple "0.1.5"]
     [riddley "0.1.7"]
   [slingshot "0.10.3" :exclusions [[org.clojure/clojure]]]
 [clj-stacktrace "0.2.7"]
 [clojure-complete "0.2.3" :scope "test" :exclusions [[org.clojure/clojure]]]
 [com.taoensso/sente "1.1.0"]
   [com.taoensso/encore "1.8.1"]
   [com.taoensso/timbre "3.3.1"]
     [io.aviso/pretty "0.1.12"]
 [compojure "1.1.9"]
   [clout "1.2.0"]
   [org.clojure/tools.macro "0.1.0"]
 [environ "1.0.0"]
 [hiccup "1.0.5"]
 [http-kit "2.1.19"]
 [org.clojure/clojure "1.6.0"]
 [org.clojure/clojurescript "0.0-2322"]
   [com.google.javascript/closure-compiler "v20140625"]
     [args4j "2.0.26"]
     [com.google.code.findbugs/jsr305 "1.3.9"]
     [com.google.guava/guava "17.0"]
     [com.google.javascript/closure-compiler-externs "v20140625"]
     [com.google.protobuf/protobuf-java "2.5.0"]
     [org.json/json "20090211"]
   [org.clojure/data.json "0.2.3"]
   [org.clojure/google-closure-library "0.0-20140718-946a7d39"]
     [org.clojure/google-closure-library-third-party "0.0-20140718-946a7d39"]
   [org.clojure/tools.reader "0.8.4"]
   [org.mozilla/rhino "1.7R4"]
 [org.clojure/core.async "0.1.338.0-5c5012-alpha"]
   [org.clojure/tools.analyzer.jvm "0.1.0-beta12"]
     [org.clojure/core.memoize "0.5.6"]
       [org.clojure/core.cache "0.6.3"]
         [org.clojure/data.priority-map "0.0.2"]
     [org.clojure/tools.analyzer "0.1.0-beta12"]
     [org.ow2.asm/asm-all "4.1"]
 [org.clojure/tools.nrepl "0.2.6" :scope "test" :exclusions [[org.clojure/clojure]]]
 [prone "0.6.0"]
 [ring/ring-core "1.3.1"]
   [clj-time "0.6.0"]
     [joda-time "2.2"]
   [commons-fileupload "1.3"]
   [crypto-equality "1.0.0"]
   [crypto-random "1.2.0"]
   [ring/ring-codec "1.0.0"]
 [ring/ring-devel "1.3.1"]
   [ns-tracker "0.2.2"]
 [ring/ring-json "0.3.1"]
 [slamhound "1.5.5"]

More info:

portal $ lein uberjar
Compiling portal.core
java.lang.RuntimeException: No such var: encore/keys=, compiling:(taoensso/sente.clj:170:5)
ericnormand commented 10 years ago

Works fine with lein run and from cider repl.

domkm commented 10 years ago

What is the output of lein with-profile uberjar deps :tree?

ericnormand commented 10 years ago
portal $ lein with-profile uberjar deps :tree
Possibly confusing dependencies found:
[org.clojure/clojurescript "0.0-2322"] -> [org.clojure/tools.reader "0.8.4"]
 overrides
[com.taoensso/sente "1.1.0"] -> [com.taoensso/timbre "3.3.1"] -> [com.taoensso/encore "1.8.1"] -> [org.clojure/tools.reader "0.8.8"]
 and
[com.taoensso/sente "1.1.0"] -> [com.taoensso/encore "1.8.1"] -> [org.clojure/tools.reader "0.8.8"]
 and
[com.taoensso/sente "1.1.0"] -> [org.clojure/tools.reader "0.8.8"]
 and
[clj-http "1.0.0"] -> [org.clojure/tools.reader "0.8.5" :exclusions [org.clojure/clojure]]

Consider using these exclusions:
[com.taoensso/sente "1.1.0" :exclusions [org.clojure/tools.reader]]
[com.taoensso/sente "1.1.0" :exclusions [org.clojure/tools.reader]]
[com.taoensso/sente "1.1.0" :exclusions [org.clojure/tools.reader]]
[clj-http "1.0.0" :exclusions [org.clojure/tools.reader]]

[cheshire "5.3.1"] -> [com.fasterxml.jackson.core/jackson-core "2.3.1"]
 overrides
[clj-http "1.0.0"] -> [com.cognitect/transit-clj "0.8.247" :exclusions [org.clojure/clojure]] -> [com.cognitect/transit-java "0.8.257"] -> [com.fasterxml.jackson.datatype/jackson-datatype-json-org "2.3.2"] -> [com.fasterxml.jackson.core/jackson-databind "2.3.2"] -> [com.fasterxml.jackson.core/jackson-core "2.3.2"]
 and
[clj-http "1.0.0"] -> [com.cognitect/transit-clj "0.8.247" :exclusions [org.clojure/clojure]] -> [com.cognitect/transit-java "0.8.257"] -> [com.fasterxml.jackson.datatype/jackson-datatype-json-org "2.3.2"] -> [com.fasterxml.jackson.core/jackson-core "2.3.2"]

Consider using these exclusions:
[clj-http "1.0.0" :exclusions [com.fasterxml.jackson.core/jackson-core]]
[clj-http "1.0.0" :exclusions [com.fasterxml.jackson.core/jackson-core]]

warn
 [cheshire "5.3.1"]
   [com.fasterxml.jackson.core/jackson-core "2.3.1"]
   [com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.3.1"]
   [tigris "0.1.1"]
 [clj-http "1.0.0"]
   [com.cognitect/transit-clj "0.8.247" :exclusions [[org.clojure/clojure]]]
     [com.cognitect/transit-java "0.8.257"]
       [com.fasterxml.jackson.datatype/jackson-datatype-json-org "2.3.2"]
         [com.fasterxml.jackson.core/jackson-databind "2.3.2"]
           [com.fasterxml.jackson.core/jackson-annotations "2.3.0"]
       [org.apache.directory.studio/org.apache.commons.codec "1.8"]
       [org.msgpack/msgpack "0.6.10"]
         [com.googlecode.json-simple/json-simple "1.1.1" :exclusions [[junit]]]
         [org.javassist/javassist "3.18.1-GA"]
   [commons-codec "1.9" :exclusions [[org.clojure/clojure]]]
   [commons-io "2.4" :exclusions [[org.clojure/clojure]]]
   [crouton "0.1.2" :exclusions [[org.clojure/clojure]]]
     [org.jsoup/jsoup "1.7.1"]
   [org.apache.httpcomponents/httpclient "4.3.5" :exclusions [[org.clojure/clojure]]]
     [commons-logging "1.1.3"]
   [org.apache.httpcomponents/httpcore "4.3.2" :exclusions [[org.clojure/clojure]]]
   [org.apache.httpcomponents/httpmime "4.3.5" :exclusions [[org.clojure/clojure]]]
   [potemkin "0.3.8" :exclusions [[org.clojure/clojure]]]
     [clj-tuple "0.1.5"]
     [riddley "0.1.7"]
   [slingshot "0.10.3" :exclusions [[org.clojure/clojure]]]
 [com.taoensso/sente "1.1.0"]
   [com.taoensso/encore "1.8.1"]
   [com.taoensso/timbre "3.3.1"]
     [io.aviso/pretty "0.1.12"]
 [compojure "1.1.9"]
   [clout "1.2.0"]
   [org.clojure/tools.macro "0.1.0"]
 [environ "1.0.0"]
 [hiccup "1.0.5"]
 [http-kit "2.1.19"]
 [org.clojure/clojure "1.6.0"]
 [org.clojure/clojurescript "0.0-2322"]
   [com.google.javascript/closure-compiler "v20140625"]
     [args4j "2.0.26"]
     [com.google.code.findbugs/jsr305 "1.3.9"]
     [com.google.guava/guava "17.0"]
     [com.google.javascript/closure-compiler-externs "v20140625"]
     [com.google.protobuf/protobuf-java "2.5.0"]
     [org.json/json "20090211"]
   [org.clojure/data.json "0.2.3"]
   [org.clojure/google-closure-library "0.0-20140718-946a7d39"]
     [org.clojure/google-closure-library-third-party "0.0-20140718-946a7d39"]
   [org.clojure/tools.reader "0.8.4"]
   [org.mozilla/rhino "1.7R4"]
 [org.clojure/core.async "0.1.338.0-5c5012-alpha"]
   [org.clojure/tools.analyzer.jvm "0.1.0-beta12"]
     [org.clojure/core.memoize "0.5.6"]
       [org.clojure/core.cache "0.6.3"]
         [org.clojure/data.priority-map "0.0.2"]
     [org.clojure/tools.analyzer "0.1.0-beta12"]
     [org.ow2.asm/asm-all "4.1"]
 [prone "0.6.0"]
 [ring/ring-core "1.3.1"]
   [clj-time "0.6.0"]
     [joda-time "2.2"]
   [commons-fileupload "1.3"]
   [crypto-equality "1.0.0"]
   [crypto-random "1.2.0"]
   [ring/ring-codec "1.0.0"]
 [ring/ring-devel "1.3.1"]
   [clj-stacktrace "0.2.7"]
   [ns-tracker "0.2.2"]
     [org.clojure/java.classpath "0.2.2"]
     [org.clojure/tools.namespace "0.2.4"]
 [ring/ring-json "0.3.1"]
domkm commented 10 years ago

Total shot in the dark, but maybe upgrading ClojureScript to resolve the tools.reader version errors would work. It doesn't look like tools.reader is related to the missing keys= var, but I suppose it could be.

But the fact that it only happens for uberjar makes me think that it is related to your profiles or to AOT compilation.

ptaoussanis commented 10 years ago

Hey Eric,

Dom is correct (thanks Dom!) - the only way you could be seeing this error is if you're somehow pulling in a version of com.taoensso/encore earlier than v1.7.2 (when the keys= fn was added).

Your lein deps :tree output seems okay here (seems to be showing encore v1.8.1) but the dependencies that Lein pulls in will vary with the Lein profiles actually being used - and that can vary with the commands you're actually calling.

It'd help if I could see your entire project.clj file, and if you could clarify exactly what command calls are producing the error (for example, you've mentioned that lein run is fine?).

Otherwise, a simple alternative may be to just include the latest encore dep in your top-level project, currently: [com.taoensso/encore "1.9.3"]. Try stick it near the top of your project.clj's :dependencies list (and before any other com.taoensso deps).

Let me know if that works and we can go from there, cheers! :-)

ericnormand commented 10 years ago

Ok, I think I got it.

I deleted the target/ directory. Uberjar stuff was not being cleaned up with lein clean. Works now.

Thanks, Peter and Dom!

Eric

ptaoussanis commented 10 years ago

Awesome, thanks for letting me know. Feel free to ping again if you run into any further issues. Cheers! :-)