bhauman / lein-figwheel

Figwheel builds your ClojureScript code and hot loads it into the browser as you are coding!
Eclipse Public License 1.0
2.89k stars 209 forks source link

Support for lein's `:managed-dependencies` #505

Closed cprice404 closed 7 years ago

cprice404 commented 7 years ago

Figwheel doesn't currently seem to work properly with projects that used lein's :managed-dependencies.

If I do lein new figwheel hello, and then edit the resulting project file to move the clojure version to :managed-dependencies, like this:

  :managed-dependencies [[org.clojure/clojure "1.8.0"]]

  :dependencies [[org.clojure/clojure]
                           [org.clojure/clojurescript "1.9.229"]
                           [org.clojure/core.async "0.2.391"
                              :exclusions [org.clojure/tools.reader]]]

Then, running lein figwheel gives the following stack trace:

Figwheel: Cutting some fruit, just a sec ...
java.lang.IllegalArgumentException: Provided artifact is missing a version: [org.clojure/clojure nil]
 at cemerick.pomegranate.aether$add_version_from_managed_coord.invokeStatic (aether.clj:624)
    cemerick.pomegranate.aether$add_version_from_managed_coord.invoke (aether.clj:616)
    cemerick.pomegranate.aether$add_version_from_managed_coords_if_missing.invokeStatic (aether.clj:652)
    cemerick.pomegranate.aether$add_version_from_managed_coords_if_missing.invoke (aether.clj:646)
    clojure.core$partial$fn__4759.invoke (core.clj:2515)
    clojure.core$map$fn__4785.invoke (core.clj:2646)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.Cons.next (Cons.java:39)
    clojure.lang.PersistentVector.create (PersistentVector.java:73)
    clojure.lang.LazilyPersistentVector.create (LazilyPersistentVector.java:44)
    clojure.core$vec.invokeStatic (core.clj:377)
    clojure.core$vec.invoke (core.clj:367)
    cemerick.pomegranate.aether$merge_versions_from_managed_coords.invokeStatic (aether.clj:661)
    cemerick.pomegranate.aether$merge_versions_from_managed_coords.invoke (aether.clj:655)
    cemerick.pomegranate.aether$resolve_dependencies_STAR_.invokeStatic (aether.clj:763)
    cemerick.pomegranate.aether$resolve_dependencies_STAR_.doInvoke (aether.clj:677)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:646)
    clojure.core$apply.invoke (core.clj:641)
    cemerick.pomegranate.aether$resolve_dependencies.invokeStatic (aether.clj:785)
    cemerick.pomegranate.aether$resolve_dependencies.doInvoke (aether.clj:779)
    clojure.lang.RestFn.invoke (RestFn.java:2793)
    leiningen.core.classpath$fn__6722.invokeStatic (classpath.clj:260)
    leiningen.core.classpath/fn (classpath.clj:253)
    clojure.lang.AFn.applyToHelper (AFn.java:165)
    clojure.lang.AFn.applyTo (AFn.java:144)
    clojure.core$apply.invokeStatic (core.clj:646)
    clojure.core$memoize$fn__5708.doInvoke (core.clj:6107)
    clojure.lang.RestFn.invoke (RestFn.java:457)
    leiningen.core.classpath$get_dependencies.invokeStatic (classpath.clj:421)
    leiningen.core.classpath$get_dependencies.doInvoke (classpath.clj:413)
    clojure.lang.RestFn.invoke (RestFn.java:445)
    clojure.lang.AFn.applyToHelper (AFn.java:160)
    clojure.lang.RestFn.applyTo (RestFn.java:132)
    clojure.core$apply.invokeStatic (core.clj:652)
    clojure.core$apply.invoke (core.clj:641)
    leiningen.core.classpath$resolve_managed_dependencies.invokeStatic (classpath.clj:509)
    leiningen.core.classpath$resolve_managed_dependencies.doInvoke (classpath.clj:496)
    clojure.lang.RestFn.invoke (RestFn.java:445)
    leiningen.core.eval$prep.invokeStatic (eval.clj:85)
    leiningen.core.eval$prep.invoke (eval.clj:73)
    leiningen.core.eval$eval_in_project.invokeStatic (eval.clj:362)
    leiningen.core.eval$eval_in_project.invoke (eval.clj:356)
    leiningen.figwheel$eval_and_catch.invokeStatic (figwheel.clj:33)
    leiningen.figwheel$eval_and_catch.invoke (figwheel.clj:32)
    leiningen.figwheel$run_local_project.invokeStatic (figwheel.clj:51)
    leiningen.figwheel$run_local_project.invoke (figwheel.clj:46)
    leiningen.figwheel$run_figwheel.invokeStatic (figwheel.clj:143)
    leiningen.figwheel$run_figwheel.invoke (figwheel.clj:142)
    leiningen.figwheel$figwheel_main.invokeStatic (figwheel.clj:406)
    leiningen.figwheel$figwheel_main.invoke (figwheel.clj:404)
    leiningen.figwheel$eval931$fn__932.invoke (figwheel.clj:416)
    clojure.lang.MultiFn.invoke (MultiFn.java:238)
    leiningen.figwheel$figwheel.invokeStatic (figwheel.clj:517)
    leiningen.figwheel$figwheel.doInvoke (figwheel.clj:432)
    clojure.lang.RestFn.invoke (RestFn.java:410)
...

I haven't had a chance to fully grok what's going on with that call to eval-in-project yet; at a glance it seems like maybe it's creating a new project in memory and not including the :managed-dependencies. I will try to debug further and submit a PR if I get a chance.

bhauman commented 7 years ago

fixed as per the PR above