Closed aviflax closed 12 years ago
It looks like your Bishop dependency is forcing your project to use an older version of Ring that's incompatible with Hiccup 1.0.
Lein-Ring adds a [ring-server "0.2.3"]
dependency to your project map when it runs, and this in turn depends on [ring "1.1.0"]
, but Bishop depends on [ring "1.0.1"]
and for some reason Leiningen (or the Maven libraries its using) is resolving the dependency in favor of Bishop. I don't know why it would do this; it seems completely wrong.
A temporary fix is to add a [ring "1.1.1"]
dependency to your project.clj file. Because that dependency is at the top level, it overrides the dependency Bishop uses.
I'm tempted to fix this more permanently by injecting both [ring-server "0.2.3"]
and [ring "1.1.1"]
dependencies when lein-ring is run... but I'd like to figure out why the Maven libraries are resolving the dependencies in such an obviously incorrect way.
Aha, according to the Maven dependency docs:
Currently, Maven 2.0 only supports using the "nearest definition" which means that it will use the version of the closest dependency to your project in the tree of dependencies. You can always guarantee a version by declaring it explicitly in your project's POM. Note that if two dependency versions are at the same depth in the dependency tree, until Maven 2.0.8 it was not defined which one would win, but since Maven 2.0.9 it's the order in the declaration that counts: the first declaration wins.
So in this case, we have:
bishop 1.0.5 -> ring 1.0.1
ring-server 0.2.3 -> ring 1.1.0
Both Ring dependencies are at the same "depth", but because Lein-Ring injects its dependency onto the end of the existing dependencies, it comes after Bishop. Therefore Maven resolves in favor of Bishop.
To solve this, I'll make sure Lein-Ring adds its dependency to the top of the dependencies in future.
Ah, OK, thanks!
Let's keep this issue open as a reminder that this needs to be fixed.
Uses Leinjacker now, so should be fixed...
I have the same issue. Here's my project.clj
(defproject cbm "0.1.0-SNAPSHOT"
:description "FIXME: write this!"
:plugins [[lein-ring "0.7.5"]]
:dependencies [[org.clojure/clojure "1.4.0"]
[gaka "0.3.0"]
[clj-http "0.5.2"]
[cheshire "4.0.3"]
[noir "1.3.0-beta3"]
[hiccup "1.0.1"]]
:ring {:handler cdm.server/handler}
:main cbm.server)
And the exception
Exception in thread "main" java.io.FileNotFoundException: Could not locate hiccup/page_helpers__init.class or hiccup/pag
e_helpers.clj on classpath:
at clojure.lang.RT.load(RT.java:432)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:605)
at clojure.core$use.doInvoke(core.clj:5392)
at clojure.lang.RestFn.invoke(RestFn.java:482)
at ring.middleware.stacktrace$eval126$loading__4784__auto____127.invoke(stacktrace.clj:1)
at ring.middleware.stacktrace$eval126.invoke(stacktrace.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:605)
at clojure.core$use.doInvoke(core.clj:5392)
at clojure.lang.RestFn.invoke(RestFn.java:512)
at ring.server.standalone$eval11$loading__4784__auto____12.invoke(standalone.clj:1)
at ring.server.standalone$eval11.invoke(standalone.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$require.doInvoke(core.clj:5381)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at ring.server.leiningen$eval5$loading__4784__auto____6.invoke(leiningen.clj:1)
at ring.server.leiningen$eval5.invoke(leiningen.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$require.doInvoke(core.clj:5381)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at user$eval1.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6500)
at clojure.lang.Compiler.eval(Compiler.java:6477)
at clojure.core$eval.invoke(core.clj:2797)
at clojure.main$eval_opt.invoke(main.clj:297)
at clojure.main$initialize.invoke(main.clj:316)
at clojure.main$null_opt.invoke(main.clj:349)
at clojure.main$main.doInvoke(main.clj:427)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
I'm not using Bishop though, so I guess something else is bring in an older ring?
Noir 1.3.0-beta3 is the dependency that's bringing in the older version of Ring. The easiest way to fix this is just to update your Noir dependency to 1.3.0-beta10.
Lein-Ring should have overridden the Noir dependency, though... I'm not sure why it didn't.
Hm, now I'm getting this one. lein run still works fine.
Compiling cbm.server
Exception in thread "main" java.io.FileNotFoundException: Could not locate cdm/server__init.class or cdm/server.clj on c
lasspath:
at clojure.lang.RT.load(RT.java:432)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$require.doInvoke(core.clj:5381)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at user$eval1.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6500)
at clojure.lang.Compiler.eval(Compiler.java:6477)
at clojure.core$eval.invoke(core.clj:2797)
at clojure.main$eval_opt.invoke(main.clj:297)
at clojure.main$initialize.invoke(main.clj:316)
at clojure.main$null_opt.invoke(main.clj:349)
at clojure.main$main.doInvoke(main.clj:427)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
It's saying that you don't have a cdm.server
namespace. Since your project name is cbm, I suspect you've just misspelled the namespace in the handler option, i.e. it should be cbm.server/handler
.
Ah, quite embarrassing mistake. Thank you very much for your help!
Same problem here. I use the following project.clj
(defproject first-compojure "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.4.0"]
[compojure "1.1.3"]
[hiccup "1.0.2"]]
:plugins [[lein-ring "0.7.5"]]
:ring {:handler first-compojure.handler/app}
:profiles
{:dev {:dependencies [[ring-mock "0.1.3"]
[ring-serve "0.1.2"]]}})
and when try to use
lein ring server
I get:
Exception in thread "main" java.io.FileNotFoundException: Could not locate hiccup/page_helpers__init.class or hiccup/page_helpers.clj on classpath:
at clojure.lang.RT.load(RT.java:432)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:605)
at clojure.core$use.doInvoke(core.clj:5392)
at clojure.lang.RestFn.invoke(RestFn.java:482)
at ring.middleware.stacktrace$eval173$loading__4784__auto____174.invoke(stacktrace.clj:1)
at ring.middleware.stacktrace$eval173.invoke(stacktrace.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:605)
at clojure.core$use.doInvoke(core.clj:5392)
at clojure.lang.RestFn.invoke(RestFn.java:512)
at ring.server.standalone$eval11$loading__4784__auto____12.invoke(standalone.clj:1)
at ring.server.standalone$eval11.invoke(standalone.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$require.doInvoke(core.clj:5381)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at ring.server.leiningen$eval5$loading__4784__auto____6.invoke(leiningen.clj:1)
at ring.server.leiningen$eval5.invoke(leiningen.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$require.doInvoke(core.clj:5381)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at user$eval1.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6500)
at clojure.lang.Compiler.eval(Compiler.java:6477)
at clojure.core$eval.invoke(core.clj:2797)
at clojure.main$eval_opt.invoke(main.clj:297)
at clojure.main$initialize.invoke(main.clj:316)
at clojure.main$null_opt.invoke(main.clj:349)
at clojure.main$main.doInvoke(main.clj:427)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
Subprocess failed
Any idea whats going on? Clearly someone is still looking for the old hiccup, buy who and why? Thanks
If you have Leiningen 2, you can look at the dependency graph with:
lein deps :tree
One of these dependencies is including an out of date version of Hiccup.
Thanks, I was not aware of this cool feature. To my surprise, hiccup only appears once, as taken from the project file. still not sure what the issue with the hiccup/page_helpers
lein deps :tree
[compojure "1.1.3"]
[clout "1.0.1"]
[org.clojure/core.incubator "0.1.0"]
[org.clojure/tools.macro "0.1.0"]
[ring/ring-core "1.1.5"]
[clj-time "0.3.7"]
[joda-time "2.0"]
[commons-codec "1.6"]
[commons-fileupload "1.2.1"]
[commons-io "2.1"]
[javax.servlet/servlet-api "2.5"]
[hiccup "1.0.2"]
[org.clojure/clojure "1.4.0"]
[ring-mock "0.1.3"]
[ring-serve "0.1.2"]
[ring/ring-devel "1.0.0"]
[clj-stacktrace "0.2.2"]
[ns-tracker "0.1.1"]
[org.clojure/tools.namespace "0.1.0"]
[org.clojure/java.classpath "0.1.0"]
[ring/ring-jetty-adapter "1.0.0"]
[org.mortbay.jetty/jetty-util "6.1.25"]
[org.mortbay.jetty/jetty "6.1.25"]
[org.mortbay.jetty/servlet-api "2.5-20081211"]
[ring/ring-servlet "1.0.0"]
Could you have some kind of plugin in your ~/.lein/profile.clj file that is adding a dependency?
Another option is to try a lein clean
. There may be class files around in your target directory that reference an older dependency.
Thanks. No luck. lein clean did not work I have no ~/.lein/profile.clj file at all. Anything else I can look for?
Try a full git clean -fxd
, though be warned: this will remove any file or directory not in the git repository.
Another thing you could try is removing or backing-up your ~/.m2
directory. Perhaps you have a cached jar that is somehow incorrect.
Thanks git clean will not help, since its not a git project
hiccup:pom:0.3.7 and hiccup-1.0.0.pom was in .m2, but after I remove it, the first
lein ring server pull both them back. Strange, as only hiccup-1.0.2 is in the project. Something in the env calls hiccup:pom:0.3.7 and I need to find and kill it!
On Sun, Dec 2, 2012 at 11:29 PM, James Reeves notifications@github.comwrote:
Try a full git clean -fxd, though be warned: this will remove any file or directory not in the git repository.
Another thing you could try is removing or backing-up your ~/.m2directory. Perhaps you have a cached jar that is somehow incorrect.
— Reply to this email directly or view it on GitHubhttps://github.com/weavejester/lein-ring/issues/41#issuecomment-10935491.
One more bit of information. Using lein-pedantic I got the following
[ring-serve "0.1.2"] -> [ring/ring-devel "1.0.0"] is overrulling [ring-server "0.2.5"] -> [ring "1.1.4"] -> [ring/ring-devel "1.1.4"]
Please use [ring-serve "0.1.2" :exclusions [ring/ring-devel]] to get [ring/ring-devel "1.1.4"] or use [ring-server "0.2.5" :exclusions [ring/ring-devel]] to get [ring/ring-devel "1.0.0"].
[ring-serve "0.1.2"] -> [ring/ring-jetty-adapter "1.0.0"] is overrulling [ring-server "0.2.5"] -> [ring "1.1.4"] -> [ring/ring-jetty-adapter "1.1.4"]
Please use [ring-serve "0.1.2" :exclusions [ring/ring-jetty-adapter]] to get [ring/ring-jetty-adapter "1.1.4"] or use [ring-server "0.2.5" :exclusions [ring/ring-jetty-adapter]] to get [ring/ring-jetty-adapter "1.0.0"].
[ring-serve "0.1.2"] -> [ring/ring-jetty-adapter "1.0.0"] -> [ring/ring-servlet "1.0.0"] is overrulling [ring-server "0.2.5"] -> [ring "1.1.4"] -> [ring/ring-servlet "1.1.4"]
Please use [ring-serve "0.1.2" :exclusions [ring/ring-servlet]] to get [ring/ring-servlet "1.1.4"] or use [ring-server "0.2.5" :exclusions [ring/ring-servlet]] to get [ring/ring-servlet "1.0.0"]
Ah yes. I should have spotted that. The solution is just to add in a dependency for [ring/ring-devel "1.1.6"]
in your project.clj file. That will override the dependency ring-serve adds.
Thanks! nirvana at last :)
I did that, and also follows two advice from the pedantic plugin: [compojure "1.1.3"] -> [ring/ring-core "1.1.5"] is overrulling [ring/ring-devel "1.1.6"] -> [ring/ring-core "1.1.6"] Please use [compojure "1.1.3" :exclusions [ring/ring-core]] to get [ring/ring-core "1.1.6"] or use [ring/ring-devel "1.1.6" :exclusions [ring/ring-core]] to get [ring/ring-core "1.1.5"].
[ring-serve "0.1.2"] -> [ring/ring-jetty-adapter "1.0.0"] is overrulling [ring-server "0.2.5"] -> [ring "1.1.4"] -> [ring/ring-jetty-adapter "1.1.4"]
end up with the following (working!) project file: (defproject first-compojure "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :dependencies [[org.clojure/clojure "1.4.0"] [compojure "1.1.3" :exclusions [ring/ring-core]] [hiccup "1.0.2"] [ring/ring-devel "1.1.6"]] :plugins [[lein-ring "0.7.5"] [lein-pedantic "0.0.5"]] :ring {:handler first-compojure.handler/app} :profiles {:dev {:dependencies [[ring-mock "0.1.3"] [ring-serve "0.1.2" :exclusions [ring/ring-jetty-adapter]]]}})
I'm still confuse on how I could fix this myself without bothering you. Is there any way to find who is pulling the old hiccup by greping the jars or something?
Thanks again for the help, and even more for all the cool libs!
Tzach
On Tue, Dec 4, 2012 at 12:30 AM, James Reeves notifications@github.comwrote:
[ring/ring-devel "1.1.6"]
My project.clj:
ixdictionary.core/-main
just does this:(run-jetty ring-handler {:port 3000})
When I run my app with
lein run
it starts up just fine.But when I try
lein ring server
so I can get auto-code-reloading, I get this: