Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot load fipp in Java 9 using bootclasspath #60

Closed
little-dude opened this issue Mar 2, 2019 · 10 comments
Closed

Cannot load fipp in Java 9 using bootclasspath #60

little-dude opened this issue Mar 2, 2019 · 10 comments

Comments

@little-dude
Copy link

Hello,

I'm trying to install ultra which depends on fipp but I'm getting the following error:

$ lein repl
clojure.lang.Compiler$CompilerException: Syntax error compiling var at (fipp/ednize.clj:71:13).
#:clojure.error{:phase :compile-syntax-check, :line 71, :column 13, :source "fipp/ednize.clj", :symbol var}
 at clojure.lang.Compiler.analyzeSeq (Compiler.java:7114)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3888)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7108)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.access$300 (Compiler.java:38)
    clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6384)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7106)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7094)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6120)
    clojure.lang.Compiler$FnMethod.parse (Compiler.java:5467)
    clojure.lang.Compiler$FnExpr.parse (Compiler.java:4029)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7104)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7094)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$MapExpr.parse (Compiler.java:3104)
    clojure.lang.Compiler.analyze (Compiler.java:6797)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3888)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7108)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6120)
    clojure.lang.Compiler$FnMethod.parse (Compiler.java:5467)
    clojure.lang.Compiler$FnExpr.parse (Compiler.java:4029)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7104)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.eval (Compiler.java:7173)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:421)
    fipp.visit$eval2964$loading__6706__auto____2965.invoke (visit.cljc:1)
    fipp.visit$eval2964.invokeStatic (visit.cljc:1)
    fipp.visit$eval2964.invoke (visit.cljc:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:619)
    puget.printer$eval2098$loading__6706__auto____2099.invoke (printer.clj:1)
    puget.printer$eval2098.invokeStatic (printer.clj:1)
    puget.printer$eval2098.invoke (printer.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:457)
    whidbey.repl$eval2049$loading__6706__auto____2050.invoke (repl.clj:1)
    whidbey.repl$eval2049.invokeStatic (repl.clj:1)
    whidbey.repl$eval2049.invoke (repl.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:482)
    ultra.colorscheme$eval1605$loading__6706__auto____1606.invoke (colorscheme.clj:1)
    ultra.colorscheme$eval1605.invokeStatic (colorscheme.clj:1)
    ultra.colorscheme$eval1605.invoke (colorscheme.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:436)
    ultra.hardcore$eval670$loading__6706__auto____671.invoke (hardcore.clj:1)
    ultra.hardcore$eval670.invokeStatic (hardcore.clj:1)
    ultra.hardcore$eval670.invoke (hardcore.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:512)
    ultra.plugin$eval662$loading__6706__auto____663.invoke (plugin.clj:1)
    ultra.plugin$eval662.invokeStatic (plugin.clj:1)
    ultra.plugin$eval662.invoke (plugin.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    leiningen.core.utils$require_resolve.invokeStatic (utils.clj:102)
    leiningen.core.utils$require_resolve.invoke (utils.clj:95)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:816)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    clojure.core.protocols$naive_seq_reduce.invokeStatic (protocols.clj:62)
    clojure.core.protocols$interface_or_naive_reduce.invokeStatic (protocols.clj:72)
    clojure.core.protocols$fn__8144.invokeStatic (protocols.clj:169)
    clojure.core.protocols/fn (protocols.clj:124)
    clojure.core.protocols$fn__8099$G__8094__8108.invoke (protocols.clj:19)
    clojure.core.protocols$seq_reduce.invokeStatic (protocols.clj:31)
    clojure.core.protocols$fn__8131.invokeStatic (protocols.clj:75)
    clojure.core.protocols/fn (protocols.clj:75)
    clojure.core.protocols$fn__8073$G__8068__8086.invoke (protocols.clj:13)
    clojure.core$reduce.invokeStatic (core.clj:6828)
    clojure.core$reduce.invoke (core.clj:6810)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:812)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    leiningen.core.project$activate_middleware.invokeStatic (project.clj:844)
    leiningen.core.project$activate_middleware.invoke (project.clj:840)
    leiningen.core.project$init_project.invokeStatic (project.clj:986)
    leiningen.core.project$init_project.invoke (project.clj:974)
    leiningen.core.project$read.invokeStatic (project.clj:1057)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.project$read.invokeStatic (project.clj:1058)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.main$_main$fn__6771.invoke (main.clj:444)
    leiningen.core.main$_main.invokeStatic (main.clj:439)
    leiningen.core.main$_main.doInvoke (main.clj:436)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:665)
    clojure.main$main_opt.invokeStatic (main.clj:491)
    clojure.main$main_opt.invoke (main.clj:487)
    clojure.main$main.invokeStatic (main.clj:598)
    clojure.main$main.doInvoke (main.clj:561)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.main.main (main.java:37)
Caused by: java.lang.RuntimeException: Unable to resolve var: clojure.instant/thread-local-utc-date-format in this context
 at clojure.lang.Util.runtimeException (Util.java:221)
    clojure.lang.Compiler$TheVarExpr$Parser.parse (Compiler.java:720)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7106)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3888)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7108)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.access$300 (Compiler.java:38)
    clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6384)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7106)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7094)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6120)
    clojure.lang.Compiler$FnMethod.parse (Compiler.java:5467)
    clojure.lang.Compiler$FnExpr.parse (Compiler.java:4029)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7104)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7094)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$MapExpr.parse (Compiler.java:3104)
    clojure.lang.Compiler.analyze (Compiler.java:6797)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3888)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7108)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.analyze (Compiler.java:6745)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6120)
    clojure.lang.Compiler$FnMethod.parse (Compiler.java:5467)
    clojure.lang.Compiler$FnExpr.parse (Compiler.java:4029)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:7104)
    clojure.lang.Compiler.analyze (Compiler.java:6789)
    clojure.lang.Compiler.eval (Compiler.java:7173)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:421)
    fipp.visit$eval2964$loading__6706__auto____2965.invoke (visit.cljc:1)
    fipp.visit$eval2964.invokeStatic (visit.cljc:1)
    fipp.visit$eval2964.invoke (visit.cljc:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:619)
    puget.printer$eval2098$loading__6706__auto____2099.invoke (printer.clj:1)
    puget.printer$eval2098.invokeStatic (printer.clj:1)
    puget.printer$eval2098.invoke (printer.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:457)
    whidbey.repl$eval2049$loading__6706__auto____2050.invoke (repl.clj:1)
    whidbey.repl$eval2049.invokeStatic (repl.clj:1)
    whidbey.repl$eval2049.invoke (repl.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:482)
    ultra.colorscheme$eval1605$loading__6706__auto____1606.invoke (colorscheme.clj:1)
    ultra.colorscheme$eval1605.invokeStatic (colorscheme.clj:1)
    ultra.colorscheme$eval1605.invoke (colorscheme.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:436)
    ultra.hardcore$eval670$loading__6706__auto____671.invoke (hardcore.clj:1)
    ultra.hardcore$eval670.invokeStatic (hardcore.clj:1)
    ultra.hardcore$eval670.invoke (hardcore.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:512)
    ultra.plugin$eval662$loading__6706__auto____663.invoke (plugin.clj:1)
    ultra.plugin$eval662.invokeStatic (plugin.clj:1)
    ultra.plugin$eval662.invoke (plugin.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:7176)
    clojure.lang.Compiler.eval (Compiler.java:7165)
    clojure.lang.Compiler.load (Compiler.java:7635)
    clojure.lang.RT.loadResourceScript (RT.java:381)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.load (RT.java:463)
    clojure.lang.RT.load (RT.java:428)
    clojure.core$load$fn__6824.invoke (core.clj:6126)
    clojure.core$load.invokeStatic (core.clj:6125)
    clojure.core$load.doInvoke (core.clj:6109)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5908)
    clojure.core$load_one.invoke (core.clj:5903)
    clojure.core$load_lib$fn__6765.invoke (core.clj:5948)
    clojure.core$load_lib.invokeStatic (core.clj:5947)
    clojure.core$load_lib.doInvoke (core.clj:5928)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$load_libs.invokeStatic (core.clj:5985)
    clojure.core$load_libs.doInvoke (core.clj:5969)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$require.invokeStatic (core.clj:6007)
    clojure.core$require.doInvoke (core.clj:6007)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    leiningen.core.utils$require_resolve.invokeStatic (utils.clj:102)
    leiningen.core.utils$require_resolve.invoke (utils.clj:95)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:816)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    clojure.core.protocols$naive_seq_reduce.invokeStatic (protocols.clj:62)
    clojure.core.protocols$interface_or_naive_reduce.invokeStatic (protocols.clj:72)
    clojure.core.protocols$fn__8144.invokeStatic (protocols.clj:169)
    clojure.core.protocols/fn (protocols.clj:124)
    clojure.core.protocols$fn__8099$G__8094__8108.invoke (protocols.clj:19)
    clojure.core.protocols$seq_reduce.invokeStatic (protocols.clj:31)
    clojure.core.protocols$fn__8131.invokeStatic (protocols.clj:75)
    clojure.core.protocols/fn (protocols.clj:75)
    clojure.core.protocols$fn__8073$G__8068__8086.invoke (protocols.clj:13)
    clojure.core$reduce.invokeStatic (core.clj:6828)
    clojure.core$reduce.invoke (core.clj:6810)
    leiningen.core.project$apply_middleware.invokeStatic (project.clj:812)
    leiningen.core.project$apply_middleware.invoke (project.clj:810)
    leiningen.core.project$activate_middleware.invokeStatic (project.clj:844)
    leiningen.core.project$activate_middleware.invoke (project.clj:840)
    leiningen.core.project$init_project.invokeStatic (project.clj:986)
    leiningen.core.project$init_project.invoke (project.clj:974)
    leiningen.core.project$read.invokeStatic (project.clj:1057)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.project$read.invokeStatic (project.clj:1058)
    leiningen.core.project$read.invoke (project.clj:1054)
    leiningen.core.main$_main$fn__6771.invoke (main.clj:444)
    leiningen.core.main$_main.invokeStatic (main.clj:439)
    leiningen.core.main$_main.doInvoke (main.clj:436)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:665)
    clojure.main$main_opt.invokeStatic (main.clj:491)
    clojure.main$main_opt.invoke (main.clj:487)
    clojure.main$main.invokeStatic (main.clj:598)
    clojure.main$main.doInvoke (main.clj:561)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.main.main (main.java:37)

I have the following environment:

$ lein --version
Leiningen 2.9.0 on Java 11.0.2 OpenJDK 64-Bit Server VM
$ clojure
Clojure 1.10.0
user=> 

I see someone already reported the problem on the ultra repo.

I'm totally new to Clojure so I may be missing to important infos here so let me know if you need anything else.

@cichli
Copy link
Contributor

cichli commented Mar 7, 2019

Try using: LEIN_USE_BOOTCLASSPATH=no lein repl

Leiningen uses the bootclasspath by default in 2.9.0. Loading clojure.instant from the bootclasspath fails because it uses java.sql.Timestamp, whose module java.sql is not available to the bootclasspath in the new JDK9 module system.

Related Clojure ticket: CLJ-2077. The patch for that ticket means clojure.instant is conditionally loaded depending on if the relevant module is available – when we're on the bootclasspath, it's not loaded, which results in: Caused by: java.lang.RuntimeException: Unable to resolve var: clojure.instant/thread-local-utc-date-format in this context.

Relevant Leiningen commit: technomancy/leiningen@c0eb388

@taojoe
Copy link

taojoe commented May 13, 2019

@cichli

so should clojure fix this or leiningen ?

@brandonbloom
Copy link
Owner

Seems like this is unrelated to Fipp. Closing.

@brandonbloom
Copy link
Owner

PR #65 mentions bootclasspath, but it's unclear if that has anything to do with the issue of whether or not clojure.instant has been loaded.

To ensure that clojure.instant gets loaded, I've just pushed this commit:
7cef283

Please test the newly published version 0.6.19 and let me know if the problem is resolved. If it is not resolved, please let me know:

  • Does this only affect Java 9?
  • Does this affect Whidbey without Ultra?
  • What are full reproduction steps?

@venantius
Copy link

@brandonbloom So if you're using bootclasspath in a post-Java 9 world, clojure.instant is not loadable. This is because clojure.instant relies upon java.sql.Timestamp, which is no longer on bootclasspath.

You can refer to https://clojure.atlassian.net/browse/CLJ-2077 for confirmation - the workaround placed in clojure.core simply stops trying to load clojure.instant it if java.sql.Timestamp is not found, which it won't be if you're using bootclasspath.

With that in mind, you actually can't ensure that clojure.instant gets loaded - you can only do so if you're not on bootclasspath.

@venantius
Copy link

The reason we care about the behavior of bootclasspath is that at least for the moment, Leiningen still uses it. You can pass LEIN_USE_BOOTCLASSPATH=no to force it to not use the classpath, but at the moment anything consuming Fipp upstream that happens to rely on bootclasspath behavior will crash. The change proposed in #65 was intended to say: if java.sql.Timestamp can't be found, that means we're probably in a bootclasspath environment, so we shouldn't even try to load clojure.instant

@brandonbloom brandonbloom changed the title Syntax error compiling var at (fipp/ednize.clj:71:13) Cannot load fipp in Java 9 using bootclasspath Sep 8, 2019
@brandonbloom
Copy link
Owner

Thanks for the link to CLJ-2077, that clears things up for me.

I'm not sure I like the when-class solution employed by core. As mentioned in response to #65, that creates an issue with load-order sensitivity. Thanks to the magic of dynamic class loaders, the presence of a class may change after testing for it.

at the moment anything consuming Fipp upstream that happens to rely on bootclasspath behavior will crash

Considering that it looks like bootclasspath is going away, is there any good reason why anything should rely on this behavior? Is there any meaningful disadvantage to setting LEIN_USE_BOOTCLASSPATH=no?

@venantius
Copy link

Thanks to the magic of dynamic class loaders, the presence of a class may change after testing for it.

This is true, but I'd argue that in that case it's the responsibility of the party engaged in dynamic classloading to handle the classloading order in such a way as to achieve the necessary outcome. Dynamic classloading is black magic and the parties engaged in it typically know that there might be dragons.

Considering that it looks like bootclasspath is going away, is there any good reason why anything should rely on this behavior? Is there any meaningful disadvantage to setting LEIN_USE_BOOTCLASSPATH=no?

Is bootclasspath going away? I've only read about libraries getting removed from it, not it going away entirely (I'm not staking a position here, I just literally couldn't find a thread where its absence wholesale was discussed).

Lein continues to rely on bootclasspath because not using it slows down Lein initialization time by about 30%. For them, moving away from bootclasspath would have a negative startup time impact on all of their users, even those who wouldn't otherwise have been affected by bootclasspath issues. Particularly relevant since they like having backwards compatibility to Java 8.

For me (selfishly, as the Ultra maintainer), I see two disadvantages to setting LEIN_USE_BOOTCLASSPATH=no - it's an extra env var my users have to configure that could be avoided, and it'll slow their lein initialization time by 30%.

@brandonbloom
Copy link
Owner

Is bootclasspath going away?

Quoting from the JDK 9 Release Notes:

The boot class path has been mostly removed in this release. The java -Xbootclasspath and -Xbootclasspath/p options have been removed. The javac -bootclaspath option can only be used when compiling to JDK 8 or older. The system property sun.boot.class.path has been removed. Deployments that rely on overriding platform classes for testing purposes with -Xbootclasspath/p will need to changed to use the --patch-module option that is documented in JEP 261. The -Xbootclasspath/a option is unchanged.

Thanks for taking the time to provide your perspective, but for the following reasons I'm not going to fix this issue:

  1. While I'm sympathetic to Leiningen's desire to accelerate initialization time, the move to remove the bootclasspath feature from the JDK suggests that this is not a good way to go about it.
  2. I really don't want to get in to the business of conditional compilation and dependency management with Fipp. Simply put: Fipp depends on clojure.instant. Barring some newly discovered ignorance about bootclasspath, I think Clojure made a mistake in supporting this.
  3. Presumably, an alternative workaround is to either (A) not use Fipp during these "boot" scenarios. or (B) alter the bootclasspath to load the necessary code.
  4. On a personal note, I don't use Ultra or JDK 9. I do use Whidbey, but it seems to work fine, at least with JDK 8. I don't have a pressing need to upgrade, and if I do, I'll probably eliminate Lein from my workflow entirely. Some of my projects have already moved to deps.edn and the improved clojure.main & clojure.repl bits.

Let me know if I've grossly misunderstood something.

@venantius
Copy link

I think your position is fair.

Structurally this is a very complex domain with legitimate motivations for everyone acting. The JDK folks want to minimize attack surface area. The Lein folks want to minimize startup time. The Clojure folks want to maintain backwards compatibility.

The ecosystem in which this problem exists is one that doesn't lend itself to a clean solution, at least for now. Fipp doesn't need to support weird runtime configuration environments. #65 was the lowest-impact change that could have been proposed to accommodate said runtime configuration environments, but I understand why that's not enough to justify merging it.

cbcoutinho pushed a commit to cbcoutinho/.dotfiles that referenced this issue Oct 20, 2019
An ultra dep is causing issues with jdk 9+

    venantius/ultra/issues/108

The offending dep is not willing to change because ultra is relying on a
feature that is only present in jdk 8, and has since been removed

    brandonbloom/fipp/issues/60
cbcoutinho pushed a commit to cbcoutinho/.dotfiles that referenced this issue Oct 20, 2019
An ultra dep is causing issues with jdk 9+

    venantius/ultra/issues/108

The offending dep is not willing to change because ultra is relying on a
feature that is only present in jdk 8, and has since been removed

    brandonbloom/fipp/issues/60
svdo added a commit to Coding-Dojos-Eindhoven/2019-10-24-Logic-Programming that referenced this issue Jan 10, 2021
sergeyklay added a commit to sergeyklay/dotfiles that referenced this issue Jun 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants