alexander-yakushev / lein-skummet

Leiningen plugin for lean-compiling Clojure projects

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

lein skummet jar: *warn-on-reflection*

manuel-uberti opened this issue · comments

Hi,

thank you for your work.
I cloned the sample project. This works fine:

lein do skummet compile, skummet run

However, I can't create the JAR with: lein skummet jar. I get this error:

Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: *warn-on-reflection* in this context, compili
ng:(/tmp/form-init8081710098986595353.clj:1:77)                                                                              
        at clojure.lang.Compiler.analyze(Compiler.java:6775)
        at clojure.lang.Compiler.analyze(Compiler.java:6717)
        at clojure.lang.Compiler$AssignExpr$Parser.parse(Compiler.java:737)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6983)
        at clojure.lang.Compiler.analyze(Compiler.java:6756)
        at clojure.lang.Compiler.analyze(Compiler.java:6717)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6093)
        at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5527)
        at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4088)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6963)
        at clojure.lang.Compiler.analyze(Compiler.java:6756)
        at clojure.lang.Compiler.eval(Compiler.java:7056)
        at clojure.lang.Compiler.eval(Compiler.java:7048)
        at clojure.lang.Compiler.load(Compiler.java:7555)
        at clojure.lang.Compiler.loadFile(Compiler.java:7493)
        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:423)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.Var.applyTo(Var.java:740)
        at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Unable to resolve symbol: *warn-on-reflection* in this context
        at clojure.lang.Util.runtimeException(Util.java:221)
        at clojure.lang.Compiler.resolveIn(Compiler.java:7315)
        at clojure.lang.Compiler.resolve(Compiler.java:7259)
        at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7220)
        at clojure.lang.Compiler.analyze(Compiler.java:6738)
        ... 24 more
Compilation failed: Subprocess failed

Any suggestion?

Hello Manuel, sorry for the late response. I've just tried the sample again and it could create a JAR without errors. Do you use the latest version of lein-skummet? Can you try creating a JAR inside the sample project?

That is what I did:

~/projects/lein-skummet/sample % lein do skummet compile, skummet run
lein do skummet compile, skummet run
Compiling sample.core
compiling: (clojure.core/in-ns (quote sample.core)) --- user
compiling: ((clojure.core/fn loading__1495__auto__ [] (. clojure.lang.Var (clojure.core/pushThreadBindings {clojure.lang.Compiler/LOADER (.getClassLoader (.getClass loading__1495__auto__))})) (try (clojure.core/gen-class :name "sample.core" :impl-ns sample.core :main true) (clojure.core/refer (quote clojure.core)) (finally (. clojure.lang.Var (clojure.core/popThreadBindings)))))) --- sample.core
compiling: (if (.equals (quote sample.core) (quote clojure.core)) nil (do (clojure.core/dosync (clojure.core/commute (clojure.core/deref (var clojure.core/*loaded-libs*)) clojure.core/conj (quote sample.core))) nil)) --- sample.core
compiling: (def wont-be-lean (clojure.core/fn ([] (str "foo" "bar")))) --- sample.core
compiling: (def foo (clojure.core/fn ([x] (println "Hello, World!" x) (println (wont-be-lean))))) --- sample.core
compiling: (def -main (clojure.core/fn ([& args] (foo (or (first args) 42))))) --- sample.core
Hello, World! 42
foobar
~/projects/lein-skummet/sample % lein skummet jar
lein skummet jar
Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: *warn-on-reflection* in this context, compiling:(/tmp/form-init1600897532241068890.clj:1:77)
    at clojure.lang.Compiler.analyze(Compiler.java:6775)
    at clojure.lang.Compiler.analyze(Compiler.java:6717)
    at clojure.lang.Compiler$AssignExpr$Parser.parse(Compiler.java:737)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6983)
    at clojure.lang.Compiler.analyze(Compiler.java:6756)
    at clojure.lang.Compiler.analyze(Compiler.java:6717)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6093)
    at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5527)
    at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4088)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6963)
    at clojure.lang.Compiler.analyze(Compiler.java:6756)
    at clojure.lang.Compiler.eval(Compiler.java:7056)
    at clojure.lang.Compiler.eval(Compiler.java:7048)
    at clojure.lang.Compiler.load(Compiler.java:7555)
    at clojure.lang.Compiler.loadFile(Compiler.java:7493)
    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:423)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.Var.applyTo(Var.java:740)
    at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Unable to resolve symbol: *warn-on-reflection* in this context
    at clojure.lang.Util.runtimeException(Util.java:221)
    at clojure.lang.Compiler.resolveIn(Compiler.java:7315)
    at clojure.lang.Compiler.resolve(Compiler.java:7259)
    at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7220)
    at clojure.lang.Compiler.analyze(Compiler.java:6738)
    ... 24 more
Compilation failed: Subprocess failed

Or am I doing something different from what you are saying?

You are doing everything correctly.

I'm not sure which dependency versions are in your sample. Is that the latest versions of the sample? Can you pull the latest version?

Sure, different error now:

~/projects % git clone https://github.com/alexander-yakushev/lein-skummet
git clone https://github.com/alexander-yakushev/lein-skummet
Cloning into 'lein-skummet'...
remote: Counting objects: 40, done.        
remote: Total 40 (delta 0), reused 0 (delta 0), pack-reused 40        
Unpacking objects: 100% (40/40), done.
Checking connectivity... done.
~/projects % cd lein-skummet/sample
cd lein-skummet/sample
~/projects/lein-skummet/sample % lein do skummet compile, skummet run
lein do skummet compile, skummet run
Retrieving org/skummet/clojure/1.7.0-RC1/clojure-1.7.0-RC1.pom from clojars
Retrieving org/skummet/clojure/1.7.0-RC1/clojure-1.7.0-RC1.jar from clojars
Compiling sample.core
compiling: (clojure.core/in-ns (quote sample.core)) --- user
compiling: ((clojure.core/fn loading__1495__auto__ [] (. clojure.lang.Var (clojure.core/pushThreadBindings {clojure.lang.Compiler/LOADER (.getClassLoader (.getClass loading__1495__auto__))})) (try (clojure.core/gen-class :name "sample.core" :impl-ns sample.core :main true) (clojure.core/refer (quote clojure.core)) (finally (. clojure.lang.Var (clojure.core/popThreadBindings)))))) --- sample.core
compiling: (if (.equals (quote sample.core) (quote clojure.core)) nil (do (clojure.core/dosync (clojure.core/commute (clojure.core/deref (var clojure.core/*loaded-libs*)) clojure.core/conj (quote sample.core))) nil)) --- sample.core
compiling: (def wont-be-lean (clojure.core/fn ([] (str "foo" "bar")))) --- sample.core
compiling: (def foo (clojure.core/fn ([x] (println "Hello, World!" x) (println (wont-be-lean))))) --- sample.core
compiling: (def -main (clojure.core/fn ([& args] (foo (or (first args) 42))))) --- sample.core
Hello, World! 42
foobar
~/projects/lein-skummet/sample % lein skummet jar
lein skummet jar
Exception in thread "main" clojure.lang.ArityException: Wrong number of args (3) passed to: , compiling:(clojure/main.clj:1:1)
    at clojure.lang.Compiler.load(Compiler.java:7567)
    at clojure.lang.RT.loadResourceScript(RT.java:367)
    at clojure.lang.RT.loadResourceScript(RT.java:358)
    at clojure.lang.RT.load(RT.java:459)
    at clojure.lang.RT.load(RT.java:408)
    at clojure.core$load$fn__1320.invoke(core.clj:5864)
    at clojure.core$load.doInvoke(core.clj:5863)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invoke(core.clj:5669)
    at clojure.core$load_lib$fn__1253.invoke(core.clj:5709)
    at clojure.core$load_lib.doInvoke(core.clj:5708)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invoke(core.clj:630)
    at clojure.core$load_libs.doInvoke(core.clj:5747)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:630)
    at clojure.core$require.doInvoke(core.clj:5830)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:419)
    at clojure.main.main(main.java:36)
Caused by: clojure.lang.ArityException: Wrong number of args (3) passed to: 
    at clojure.lang.Compiler.macroexpand1(Compiler.java:6868)
    at clojure.lang.Compiler.macroexpand(Compiler.java:6934)
    at clojure.lang.Compiler.eval(Compiler.java:7043)
    at clojure.lang.Compiler.load(Compiler.java:7555)
    ... 19 more
Compilation failed: Subprocess failed

Yeah, the error isn't helping much:(. Can you do lein clean and then repeat to see if it will be any different?

Yes, and one more thing. Which version of Leiningen do you have?

~/projects/lein-skummet/sample % lein version
lein version
Leiningen 2.5.1 on Java 1.8.0_45-internal OpenJDK Server VM

After lein clean:

~/projects/lein-skummet/sample % lein clean
lein clean
~/projects/lein-skummet/sample % lein do skummet compile, skummet run
lein do skummet compile, skummet run
Compiling sample.core
compiling: (clojure.core/in-ns (quote sample.core)) --- user
compiling: ((clojure.core/fn loading__1495__auto__ [] (. clojure.lang.Var (clojure.core/pushThreadBindings {clojure.lang.Compiler/LOADER (.getClassLoader (.getClass loading__1495__auto__))})) (try (clojure.core/gen-class :name "sample.core" :impl-ns sample.core :main true) (clojure.core/refer (quote clojure.core)) (finally (. clojure.lang.Var (clojure.core/popThreadBindings)))))) --- sample.core
compiling: (if (.equals (quote sample.core) (quote clojure.core)) nil (do (clojure.core/dosync (clojure.core/commute (clojure.core/deref (var clojure.core/*loaded-libs*)) clojure.core/conj (quote sample.core))) nil)) --- sample.core
compiling: (def wont-be-lean (clojure.core/fn ([] (str "foo" "bar")))) --- sample.core
compiling: (def foo (clojure.core/fn ([x] (println "Hello, World!" x) (println (wont-be-lean))))) --- sample.core
compiling: (def -main (clojure.core/fn ([& args] (foo (or (first args) 42))))) --- sample.core
Hello, World! 42
foobar
~/projects/lein-skummet/sample % lein skummet jar
lein skummet jar
Exception in thread "main" clojure.lang.ArityException: Wrong number of args (3) passed to: , compiling:(clojure/main.clj:1:1)
    at clojure.lang.Compiler.load(Compiler.java:7567)
    at clojure.lang.RT.loadResourceScript(RT.java:367)
    at clojure.lang.RT.loadResourceScript(RT.java:358)
    at clojure.lang.RT.load(RT.java:459)
    at clojure.lang.RT.load(RT.java:408)
    at clojure.core$load$fn__1320.invoke(core.clj:5864)
    at clojure.core$load.doInvoke(core.clj:5863)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invoke(core.clj:5669)
    at clojure.core$load_lib$fn__1253.invoke(core.clj:5709)
    at clojure.core$load_lib.doInvoke(core.clj:5708)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invoke(core.clj:630)
    at clojure.core$load_libs.doInvoke(core.clj:5747)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:630)
    at clojure.core$require.doInvoke(core.clj:5830)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:419)
    at clojure.main.main(main.java:36)
Caused by: clojure.lang.ArityException: Wrong number of args (3) passed to: 
    at clojure.lang.Compiler.macroexpand1(Compiler.java:6868)
    at clojure.lang.Compiler.macroexpand(Compiler.java:6934)
    at clojure.lang.Compiler.eval(Compiler.java:7043)
    at clojure.lang.Compiler.load(Compiler.java:7555)
    ... 19 more
Compilation failed: Subprocess failed

OK, spotted it. It fails with the same error for me too on Leiningen 2.5.1. I stay at 2.4.3. Let me take a look what has to be done to fix lein-skummet for 2.5.

Sure, thank you for your support.

OK, so the reason is that Leiningen 2.5 has a broken profile system and I already encountered other issues because of that. Leiningen sucks ass right now, and I hope to migrate to Boot soon. Meanwhile, I suggest downgrading to 2.4.3 as the last sane version.

Sorry for venting, but I've just spent 1.5 hours trying to hack around a bug in leiningen.jar. In the end I couldn't do it. There is also not much sense in reporting an issue to Leiningen, there are 125 opened issues there right now, fresh ones unanswered.

Ok, no problem then. Consider it close.
Also, whenever you migrate to Boot I'll take that chance to try that instead of Leiningen.