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 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)
>
> ...

-- 
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