weavejester / lein-ring

Ring plugin for Leiningen
Eclipse Public License 1.0
500 stars 100 forks source link

lein ring server throws a FileNotFoundException related to Hiccup while lein run works fine #41

Closed aviflax closed 12 years ago

aviflax commented 12 years ago

My project.clj:

(defproject ixdictionary "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[ring/ring-core "1.1.1"]
                 [org.clojure/clojure "1.4.0"]
                 [org.drift-db/drift-db-h2 "1.1.0"]
                 [korma "0.3.0-beta11"]
                 [tnrglobal/bishop "1.0.5"]
                 [cheshire "4.0.0"]
                 [hiccup "1.0.0"]]
  :dev-dependencies [[com.h2database/h2 "1.3.167"]]
  :warn-on-reflection true
  :main ixdictionary.core
  :plugins [[lein-ring "0.7.1"]]
  :ring {:handler ixdictionary.core/ring-handler})

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:


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$eval88$loading__4784__auto____89.invoke(stacktrace.clj:1)
    at ring.middleware.stacktrace$eval88.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)
weavejester commented 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.

weavejester commented 12 years ago

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.

aviflax commented 12 years ago

Ah, OK, thanks!

weavejester commented 12 years ago

Let's keep this issue open as a reminder that this needs to be fixed.

weavejester commented 12 years ago

Uses Leinjacker now, so should be fixed...

matthewp commented 11 years ago

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)
matthewp commented 11 years ago

I'm not using Bishop though, so I guess something else is bring in an older ring?

weavejester commented 11 years ago

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.

matthewp commented 11 years ago

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)
weavejester commented 11 years ago

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.

matthewp commented 11 years ago

Ah, quite embarrassing mistake. Thank you very much for your help!

tzach commented 11 years ago

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

weavejester commented 11 years ago

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.

tzach commented 11 years ago

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"] 
weavejester commented 11 years ago

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.

tzach commented 11 years ago

Thanks. No luck. lein clean did not work I have no ~/.lein/profile.clj file at all. Anything else I can look for?

weavejester commented 11 years ago

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.

tzach commented 11 years ago

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.

tzach commented 11 years ago

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

weavejester commented 11 years ago

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.

tzach commented 11 years ago

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