clj-commons / pretty

Library for helping print things prettily, in Clojure - ANSI fonts, formatted exceptions

Home Page:https://cljdoc.org/d/org.clj-commons/pretty

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ClassNotFoundException: io.aviso.repl in pretty 0.1.20

timgilbert opened this issue · comments

Hi! I'm trying to setup pretty 0.1.20 as a lein plugin as described here in my Clojure 1.7 project. I added both the :dependencies and :plugins entries as [io.aviso/pretty "0.1.20"], but when I run lein test I see the following stack trace:

Exception in thread "main" java.lang.ClassNotFoundException: io.aviso.repl, compiling:(/private/var/folders/x3/kzv3bbmx1rsfrpg4zx9v07rm0000gq/T/form-init32875118242980433.clj:1:123)
    at clojure.lang.Compiler.load(Compiler.java:7239)
    at clojure.lang.Compiler.loadFile(Compiler.java:7165)
    at clojure.main$load_script.invoke(main.clj:275)
    at clojure.main$init_opt.invoke(main.clj:280)
    at clojure.main$initialize.invoke(main.clj:308)
    at clojure.main$null_opt.invoke(main.clj:343)
    at clojure.main$main.doInvoke(main.clj:421)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:383)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.Var.applyTo(Var.java:700)
    at clojure.main.main(main.java:37)
Caused by: java.lang.ClassNotFoundException: io.aviso.repl
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:69)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at clojure.lang.DynamicClassLoader.loadClass(DynamicClassLoader.java:77)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at clojure.lang.RT.classForName(RT.java:2154)
    at clojure.lang.RT.classForName(RT.java:2163)
    at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:1017)
    at clojure.lang.Compiler$HostExpr.access$600(Compiler.java:795)
    at clojure.lang.Compiler.macroexpand1(Compiler.java:6662)
    at clojure.lang.Compiler.macroexpand(Compiler.java:6692)
    at clojure.lang.Compiler.eval(Compiler.java:6766)
    at clojure.lang.Compiler.eval(Compiler.java:6771)
    at clojure.lang.Compiler.load(Compiler.java:7227)
    ... 11 more
Tests failed.

When I use [io.aviso/pretty "0.1.19"] instead I don't see this behavior (however, I also don't see any enhanced stack-traces during lein test, but that seems like a different problem and I'll file a separate issue if I get the time to gather up more details). 1.18.0 also seemed to work correctly.

Oh, I should add that I'm running Leiningen 2.5.3 on Java 1.8.0_45 Java HotSpot(TM) 64-Bit Server VM on OS/X 10.11.2, in case that's helpful.

What's in your user.clj?

Here's what I have right now. I don't have tons of time ATM but when I do I'll remove this and see if I can still reproduce the issue. Also I recently tried with 0.1.21 and still saw the error.

{:user {:plugins [[lein-try "0.4.3"]
          [lein-kibit "0.1.2"]
                  [jonase/eastwood "0.2.2" :exclusions [org.clojure/clojure]]
                  [lein-hiera "0.9.5"]
                  [lein-collisions "0.1.4"]]
        :hiera {:vertical true}}}

I've also realized that I only see this behavior when running lein test. Running lein ring server or lein test-refresh work fine for me.

I am also getting this error:

$ lein test
Exception in thread "main" java.lang.ClassNotFoundException: io.aviso.repl, compiling:(/private/var/folders/xl/z_j_yt_s5z18y3zdqg24tn180000gn/T/form-init7515724856406436718.clj:1:5)
    at clojure.lang.Compiler.load(Compiler.java:7391)
    at clojure.lang.Compiler.loadFile(Compiler.java:7317)
    at clojure.main$load_script.invokeStatic(main.clj:275)
    at clojure.main$init_opt.invokeStatic(main.clj:277)
    at clojure.main$init_opt.invoke(main.clj:277)
    at clojure.main$initialize.invokeStatic(main.clj:308)
    at clojure.main$null_opt.invokeStatic(main.clj:342)
    at clojure.main$null_opt.invoke(main.clj:339)
    at clojure.main$main.invokeStatic(main.clj:421)
    at clojure.main$main.doInvoke(main.clj:384)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:383)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.Var.applyTo(Var.java:700)
    at clojure.main.main(main.java:37)
Caused by: java.lang.ClassNotFoundException: io.aviso.repl
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:69)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at clojure.lang.DynamicClassLoader.loadClass(DynamicClassLoader.java:77)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at clojure.lang.RT.classForName(RT.java:2168)
    at clojure.lang.RT.classForName(RT.java:2177)
    at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:1030)
    at clojure.lang.Compiler.macroexpand1(Compiler.java:6807)
    at clojure.lang.Compiler.macroexpand(Compiler.java:6837)
    at clojure.lang.Compiler.eval(Compiler.java:6911)
    at clojure.lang.Compiler.eval(Compiler.java:6916)
    at clojure.lang.Compiler.load(Compiler.java:7379)
    ... 14 more
Tests failed.

~/.lein/profiles.clj:

{:user {:plugins [[lein-pprint "1.1.1"]
                  [venantius/ultra "0.4.0"]
                  [com.jakemccrary/lein-test-refresh "0.12.0"]
                  [io.aviso/pretty "0.1.22"]
                  [lein-hiera "0.9.5"]]
        :dependencies [[io.aviso/pretty "0.1.22"]
                       [pjstadig/humane-test-output "0.7.1"]]
        :injections [(require 'pjstadig.humane-test-output)
                     (pjstadig.humane-test-output/activate!)]
        :test-refresh {:notify-command ["terminal-notifier" "-title" "Tests" "-message"]}}}

You must be picking up an out-of-date version of pretty.

Ah, there it is. ultra uses an older version of pretty; you will need to contact them, or play with :exclusions to make this work.