The problem is that your dependency tree pulls in core.memoize 0.5.3, but
other libraries have a dependency on 0.5.6. If you run "lein deps :tree"
you can see this for yourself:

    [clj-jgit "0.8.1"] -> [org.clojure/core.memoize "0.5.3"]
     overrides
    [lib-noir "0.9.4"] -> [ring-middleware-format "0.4.0"] ->
[org.clojure/core.memoize "0.5.6"]

Maven dependency management is a little odd. "Closer" dependencies are
preferred, even if their version number is lower, so the memoize library
pulled in my clj-jgit is preferred over the one pulled in indirectly by
lib-noir.

The reason it works on your laptop might be something to do with your
profiles.clj. Perhaps you have a plugin that pulls in the core.memoize
0.5.6 dependency, which causes everything to work.

The solution to this is to add in an explicit dependency for core.memoize
0.5.6 in your project file. This will ensure you have the latest version.
You may also want to do something about all the other conflicts you have in
the dependency tree...

- James


On 13 November 2014 22:26, Simon Brooke <still...@googlemail.com> wrote:

> Hi everyone
>
> Yesterday I proudly announced my new Wiki engine; today I'm investigating
> an odd bug which prevents it compiling on some Ubuntu machines, but not my
> laptop (on which I did the development), and I'm really puzzled by it.
>
> Top level outline:
>
> When one clones the repository from
> https://github.com/simon-brooke/smeagol.git and then invokes
>
>     lein repl
>
> (or lein ring uberwar, lein ring server, and so on) one gets an odd bug.
>
> If one does simple 'lein repl', one gets an error message '#<CompilerException
> java.lang.IllegalAccessError: lu does not exist,
> compiling:(ring/middleware/format_response.clj:1:1)>'; if one then does
>
>     smeagol.repl=> (ns smeagol.repl
>           #_=>   (:use smeagol.handler
>           #_=>         ring.server.standalone
>           #_=>         [ring.middleware file-info file]))
>
> one gets
>
>     CompilerException java.lang.IllegalAccessError: lu does not exist,
> compiling:(ring/middleware/format_response.clj:1:1)
>
> If one instead does
>
>     lein ring server
>
> one gets a full stacktrace, which I'll append at the end of this post.
> However, the diagnosis as far as I've got goes like this:
>
> The file ring/middleware/format_response.clj
> <https://github.com/ngrunwald/ring-middleware-format/blob/master/src/ring/middleware/format_response.clj>
> starts with this expression:
>
> (ns ring.middleware.format-response (:require [cheshire.core :as json] [
> ring.util.response :as res] [clojure.java.io :as io] [clj-yaml.core :as
> yaml] [clojure.string :as s] [cognitect.transit :as transit]) (:use [
> clojure.core.memoize :only [lu]]) (:import [java.io File InputStream
> BufferedInputStream ByteArrayOutputStream] [java.nio.charset Charset]))
>
> I've highlighted the sub-expression I'm suspicious of.
>
> Looking at clojure/core/memoize.clj
> <https://github.com/clojure/core.memoize/blob/master/src/main/clojure/clojure/core/memoize.clj>,
> there is both '(def-deprecated lu ...)' (line 373) and '(defn lu ...)'
> (line 384). I'm not sure what is going on there, and I'm even more
> confused that the deprecation comment says
>
> (def-deprecated lu "DEPRECATED: Please use clojure.core.memoize/lu
> instead."
> Given that this is in the namespace clojure.core.memoize, that comment
> doesn't make sense to me - I'm obviously missing something. My guess that
> the namespace clojure.core.memoize should be provided by the jar
> clojure-1.6.0.jar seems to be correct:
>
> simon@fletcher:~/workspace/smeagol$ jar tvf
> /home/simon/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar |
> grep memoize
> 1055 Tue Mar 25 08:45:06 GMT 2014 clojure/core$memoize.class
> 1708 Tue Mar 25 08:45:06 GMT 2014 clojure/core$memoize$fn__5097.class
>
>
> On both the machines on which Smeagol works, and on the machines on which
> Smeagol does not work, the file size of clojure.1.0.jar is 3664472 bytes
> and the MD5 sum is fdbad523e92cb53e61484106431d4489, so it's not the case
> that I've got different versions of Clojure. Likewise the filesize of
> /home/simon/.m2/repository/ring-middleware-format/ring-middleware-format/0.4.0/ring-middleware-format-0.4.0.jar
> is 14366 bytes and the MD5 sum is 38b9850a38bd9ee5eb3321c73cada73c both
> on working and on non working installations.
>
> I've pulled the source for ring-middleware-format from
> https://github.com/ngrunwald/ring-middleware-format.git - it compiles
> without complaint (but is a slightly later version than the 0.4.0 build,
> it's 0.4.1-SNAPSHOT).
>
> Oh, and (having made a backup, fortunately) I've done a 'lein clean; lein
> ring server' on my development machine and established that it now also has
> the bug. There is literally nothing that is not either in the git-ignore
> file or else in git.
>
> In short, I'm stuck and puzzled. I don't think this is my bug, but I'm
> prepared to believe it could be. I don't understand why the bug appears in
> a clean checkout, but doesn't occur in my development directory. I'm not
> yet confident enough that it's someone else's bug to post an issue on their
> repository. Any help you can give would be extremely welcome!
>
> My .git-ignore is as follows:
>
> smeagol.log
> pom.xml
> pom.xml.asc
> *jar
> /lib/
> /classes/
> /target/
> /checkouts/
> /resources/public/content/.git
> .lein-deps-sum
> .lein-repl-history
> .lein-plugins/
> .lein-failures
> .lein-env
>
>
> My project.clj is as follows:
>
> (defproject smeagol "0.2.0-SNAPSHOT"
> :description "A simple Git-backed Wiki inspired by Gollum"
> :url "http://example.com/FIXME";
> :dependencies [[org.clojure/clojure "1.6.0"]
> [lib-noir "0.9.4" :exclusions [org.clojure/core.memoize
> org.clojure/tools.reader]]
> [ring-server "0.3.1"]
> [selmer "0.7.2"]
> [com.taoensso/timbre "3.3.1" :exclusions [org.clojure/tools.reader]]
> [com.taoensso/tower "3.0.2" :exclusions [com.taoensso/encore]]
> [markdown-clj "0.9.55" :exclusions [com.keminglabs/cljx]]
> [clj-jgit "0.8.1"]
> [environ "1.0.0"]
> [im.chit/cronj "1.4.2"]
> [noir-exception "0.2.2"]
> [prone "0.6.0"]]
>  :repl-options {:init-ns smeagol.repl}
> :jvm-opts ["-server"]
> :plugins [[lein-ring "0.8.13" :exclusions [org.clojure/clojure]]
> [lein-environ "1.0.0"]
> [lein-ancient "0.5.5" :exclusions [org.clojure/clojure
> org.clojure/data.xml]]
> [lein-marginalia "0.7.1" :exclusions [org.clojure/clojure]]]
> :ring {:handler smeagol.handler/app
> :init smeagol.handler/init
> :destroy smeagol.handler/destroy}
> :profiles
> {:uberjar {:omit-source true
> :env {:production true}
> :aot :all}
> :production {:ring {:open-browser? false
> :stacktraces? false
> :auto-reload? false}}
> :dev {:dependencies [[ring-mock "0.1.5"]
> [ring/ring-devel "1.3.1"]
> [pjstadig/humane-test-output "0.6.0"]]
> :injections [(require 'pjstadig.humane-test-output)
> (pjstadig.humane-test-output/activate!)]
> :env {:dev true}}}
> :min-lein-version "2.0.0")
>
>
> Full stack trace:
>
> simon@fletcher:~/workspace/smeagol$ lein ring server
> Exception in thread "main" java.lang.IllegalAccessError: lu does not
> exist, compiling:(ring/middleware/format_response.clj:1:1)
> at clojure.lang.Compiler.load(Compiler.java:7142)
> at clojure.lang.RT.loadResourceScript(RT.java:370)
> at clojure.lang.RT.loadResourceScript(RT.java:361)
> at clojure.lang.RT.load(RT.java:440)
> at clojure.lang.RT.load(RT.java:411)
> at clojure.core$load$fn__5066.invoke(core.clj:5641)
> at clojure.core$load.doInvoke(core.clj:5640)
> at clojure.lang.RestFn.invoke(RestFn.java:408)
> at clojure.core$load_one.invoke(core.clj:5446)
> at clojure.core$load_lib$fn__5015.invoke(core.clj:5486)
> at clojure.core$load_lib.doInvoke(core.clj:5485)
> at clojure.lang.RestFn.applyTo(RestFn.java:142)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$load_libs.doInvoke(core.clj:5528)
> at clojure.lang.RestFn.applyTo(RestFn.java:137)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$require.doInvoke(core.clj:5607)
> at clojure.lang.RestFn.invoke(RestFn.java:408)
> at
> ring.middleware.format$eval1014$loading__4958__auto____1015.invoke(format.clj:1)
> at ring.middleware.format$eval1014.invoke(format.clj:1)
> at clojure.lang.Compiler.eval(Compiler.java:6703)
> at clojure.lang.Compiler.eval(Compiler.java:6692)
> at clojure.lang.Compiler.load(Compiler.java:7130)
> at clojure.lang.RT.loadResourceScript(RT.java:370)
> at clojure.lang.RT.loadResourceScript(RT.java:361)
> at clojure.lang.RT.load(RT.java:440)
> at clojure.lang.RT.load(RT.java:411)
> at clojure.core$load$fn__5066.invoke(core.clj:5641)
> at clojure.core$load.doInvoke(core.clj:5640)
> at clojure.lang.RestFn.invoke(RestFn.java:408)
> at clojure.core$load_one.invoke(core.clj:5446)
> at clojure.core$load_lib$fn__5015.invoke(core.clj:5486)
> at clojure.core$load_lib.doInvoke(core.clj:5485)
> at clojure.lang.RestFn.applyTo(RestFn.java:142)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$load_libs.doInvoke(core.clj:5524)
> at clojure.lang.RestFn.applyTo(RestFn.java:137)
> at clojure.core$apply.invoke(core.clj:628)
> at clojure.core$use.doInvoke(core.clj:5618)
> at clojure.lang.RestFn.invoke(RestFn.java:805)
> at
> noir.util.middleware$eval1008$loading__4958__auto____1009.invoke(middleware.clj:1)
> at noir.util.middleware$eval1008.invoke(middleware.clj:1)
> at clojure.lang.Compiler.eval(Compiler.java:6703)
> at clojure.lang.Compiler.eval(Compiler.java:6692)
> at clojure.lang.Compiler.load(Compiler.java:7130)
> at clojure.lang.RT.loadResourceScript(RT.java:370)
> at clojure.lang.RT.loadResourceScript(RT.java:361)
> at clojure.lang.RT.load(RT.java:440)
> at clojure.lang.RT.load(RT.java:411)
> at clojure.core$load$fn__5066.invoke(core.clj:5641)
> at clojure.core$load.doInvoke(core.clj:5640)
> at clojure.lang.RestFn.invoke(RestFn.java:408)
> at clojure.core$load_one.invoke(core.clj:5446)
> at clojure.core$load_lib$fn__5015.invoke(core.clj:5486)
> at clojure.core$load_lib.doInvoke(core.clj:5485)
> at clojure.lang.RestFn.applyTo(RestFn.java:142)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$load_libs.doInvoke(core.clj:5524)
> at clojure.lang.RestFn.applyTo(RestFn.java:137)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$require.doInvoke(core.clj:5607)
> at clojure.lang.RestFn.invoke(RestFn.java:1789)
> at
> smeagol.handler$eval935$loading__4958__auto____936.invoke(handler.clj:18)
> at smeagol.handler$eval935.invoke(handler.clj:18)
> at clojure.lang.Compiler.eval(Compiler.java:6703)
> at clojure.lang.Compiler.eval(Compiler.java:6692)
> at clojure.lang.Compiler.load(Compiler.java:7130)
> at clojure.lang.RT.loadResourceScript(RT.java:370)
> at clojure.lang.RT.loadResourceScript(RT.java:361)
> at clojure.lang.RT.load(RT.java:440)
> at clojure.lang.RT.load(RT.java:411)
> at clojure.core$load$fn__5066.invoke(core.clj:5641)
> at clojure.core$load.doInvoke(core.clj:5640)
> at clojure.lang.RestFn.invoke(RestFn.java:408)
> at clojure.core$load_one.invoke(core.clj:5446)
> at clojure.core$load_lib$fn__5015.invoke(core.clj:5486)
> at clojure.core$load_lib.doInvoke(core.clj:5485)
> at clojure.lang.RestFn.applyTo(RestFn.java:142)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$load_libs.doInvoke(core.clj:5524)
> at clojure.lang.RestFn.applyTo(RestFn.java:137)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$require.doInvoke(core.clj:5607)
> at clojure.lang.RestFn.invoke(RestFn.java:457)
> at user$eval5.invoke(form-init5099686921962551806.clj:1)
> at clojure.lang.Compiler.eval(Compiler.java:6703)
> at clojure.lang.Compiler.eval(Compiler.java:6692)
> at clojure.lang.Compiler.load(Compiler.java:7130)
> at clojure.lang.Compiler.loadFile(Compiler.java:7086)
> at clojure.main$load_script.invoke(main.clj:274)
> at clojure.main$init_opt.invoke(main.clj:279)
> at clojure.main$initialize.invoke(main.clj:307)
> at clojure.main$null_opt.invoke(main.clj:342)
> at clojure.main$main.doInvoke(main.clj:420)
> at clojure.lang.RestFn.invoke(RestFn.java:421)
> at clojure.lang.Var.invoke(Var.java:383)
> at clojure.lang.AFn.applyToHelper(AFn.java:156)
> at clojure.lang.Var.applyTo(Var.java:700)
> at clojure.main.main(main.java:37)
> Caused by: java.lang.IllegalAccessError: lu does not exist
> at clojure.core$refer.doInvoke(core.clj:3919)
> at clojure.lang.RestFn.applyTo(RestFn.java:139)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$load_lib.doInvoke(core.clj:5505)
> at clojure.lang.RestFn.applyTo(RestFn.java:142)
> at clojure.core$apply.invoke(core.clj:626)
> at clojure.core$load_libs.doInvoke(core.clj:5524)
> at clojure.lang.RestFn.applyTo(RestFn.java:137)
> at clojure.core$apply.invoke(core.clj:628)
> at clojure.core$use.doInvoke(core.clj:5618)
> at clojure.lang.RestFn.invoke(RestFn.java:408)
> at
> ring.middleware.format_response$eval1020$loading__4958__auto____1021.invoke(format_response.clj:1)
> at ring.middleware.format_response$eval1020.invoke(format_response.clj:1)
> at clojure.lang.Compiler.eval(Compiler.java:6703)
> at clojure.lang.Compiler.eval(Compiler.java:6692)
> at clojure.lang.Compiler.load(Compiler.java:7130)
> ... 98 more
> Subprocess failed
>
>
>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to