I had a problem very similar to yours using clj-jgit - I ended up simply excluding jgit from pulling in core.memoize as a dependency:
[clj-jgit "0.8.0" :exclusions [org.clojure/core.memoize]] > On Nov 14, 2014, at 5:56 AM, Simon Brooke <still...@googlemail.com> wrote: > > Thank you very much for the suggestion. I believe that your diagnosis is > correct; unfortunately, your solution does not work. Furthermore, even if I > remove the dependency on clj-jgit and all references to it from my code, do a > 'lein clean', and rebuild, I still get the same error on startup (although my > application does start and run, which it didn't before). > > What does work is if I clone scm-jgit, update its dependency to > [org.clojure/core.memoize "0.5.6"] and its version to '0.8.2-SNAPSHOT', build > it with 'lein install', and then build my own application, then everything > works fine. I can't really, though, distribute a project based on an > unsupported version on someone else's project. > > I'll try sending a project.clj diff to the maintainers of clj-jgit, and see > if they'll accept it. > > This feels remarkably like DLL Hell :-( > > On Thursday, 13 November 2014 22:56:17 UTC, James Reeves wrote: > 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 <stil...@googlemail.com > <javascript:>> 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 > <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 > <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 <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) > ... > > -- > 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 > <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 > <mailto:clojure+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <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.