我正在 Clojure 中开发一个简单的 hello world web 应用程序。但是,在我将Schema库添加到我的项目后,我在尝试使用lein uberjar
. 奇怪的是,当开始使用lein dev
.
java.lang.RuntimeException: Unable to resolve symbol: missing-required-key in this context, clojure.lang.Compiler.analyze(Compiler.java:6464) at clojure 编译:(server/api.clj:21:17) .lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$VectorExpr.parse(Compiler.java:3126) 在 clojure.lang.Compiler.analyze(Compiler.java:6447) 在 clojure.lang。 Compiler.analyze(Compiler.java:6406) at clojure.lang.Compiler$MapExpr.parse(Compiler.java:2981) at clojure.lang.Compiler.analyze(Compiler.java:6453) at clojure.lang.Compiler.analyze (Compiler.java:6406) 在 clojure.lang.Compiler$MapExpr.parse(Compiler.java:2981) 在 clojure.lang.Compiler.analyze(Compiler.java:6453) 在 clojure.lang.Compiler.analyze(Compiler. java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 在 clojure.lang.Compiler.access$100(Compiler.java:38) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在clojure. .lang.Compiler$LetExpr$Parser.parse(Compiler.java:6050) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure。 lang.Compiler.analyzeSeq(Compiler.java:6632) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze(Compiler.java:6406) at clojure.lang.Compiler$InvokeExpr .parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze(Compiler. java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782)在clojure.lang.Compiler.analyzeSeq(Compiler.java:6644)在clojure.lang.Compiler.analyze(Compiler.java:6445)的clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6100) ) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang .Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang。 Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure.Compiler$LetExpr$Parser.parse(Compiler.java:6100) 在 clojure .lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang.Compiler。clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 的分析(Compiler.java:6445) clojure.lang.Compiler.analyze(Compiler.java:6445) 的 clojure.lang.Compiler.analyze(Compiler.java :6406) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782) at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6100) at clojure.lang.Compiler.analyzeSeq( Compiler.java:6644) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445 ) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang .Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure.lang。Compiler$LetExpr$Parser.parse(Compiler.java:6100) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler .analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler. java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure.lang.Compiler$FnMethod.parse(Compiler .java:5217) 在 clojure.lang.Compiler$FnExpr.parse(Compiler.java:3846) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6642) 在 clojure.lang.Compiler.analyze(Compiler.java: 6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang。Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze(Compiler.java:6406) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq (Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java: 6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632)。 lang.Compiler$InvokeExpr.parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler .analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler。clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 的 clojure.lang.Compiler.analyze(Compiler.java:6406) 的分析(Compiler.java:6445) clojure.lang.Compiler.analyzeSeq(Compiler .java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java: 3719) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6646)。 lang.Compiler$InvokeExpr.parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler .analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler。clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 的分析(Compiler.java:6445) clojure.lang.Compiler.analyze(Compiler.java:6445) 的 clojure.lang.Compiler.analyze(Compiler.java :6406) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) at clojure.lang.Compiler.analyze(Compiler.java:6445)在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) 在 clojure。 lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze (Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr。在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java) 解析(Compiler.java:3719) :6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java: 5782) 在 clojure.lang.Compiler$FnMethod.parse(Compiler.java:5217) 在 clojure.lang.Compiler$FnExpr.parse(Compiler.java:3846) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6642) ) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang .Compiler.access$100(Compiler.java:38) 在 clojure.lang.Compiler$DefExpr$Parser。在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang.Compiler.analyze(Compiler.java) 解析(Compiler.java:538) :6406) at clojure.lang.Compiler.compile1(Compiler.java:7221) at clojure.lang.Compiler.compile(Compiler.java:7292) at clojure.lang.RT.compile(RT.java:398) at clojure .lang.RT.load(RT.java:438) at clojure.lang.RT.load(RT.java:411) at clojure.core$load$fn__5066.invoke(core.clj:5641) at clojure.core$ load.doInvoke(core.clj:5640) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invoke(core.clj:5446) at clojure.core$compile$fn__5071.invoke (core.clj:5652) 在 clojure.core$compile.invoke(core.clj:5651) 在 user$eval9$fn__16.invoke(form-init1857067608391167398.clj:1) 在 user$eval9。在 clojure.lang.Compiler.eval(Compiler.java:6693) 在 clojure.lang.Compiler.eval(Compiler.java:6703) 在 clojure.lang.Compiler.load(Compiler) 调用(form-init1857067608391167398.clj:1) .java:7130) at clojure.lang.Compiler.loadFile(Compiler.java:7086) at clojure.main$load_script.invoke(main.clj:274) at clojure.main$init_opt.invoke(main.clj:279) clojure.main$initialize.invoke(main.clj:307) at clojure.main$null_opt.invoke(main.clj:342) at clojure.main$main.doInvoke(main.clj:420) 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) 原因:java.lang.RuntimeException:无法解析符号:在 clojure.lang.Compiler.resolveIn(Compiler.java:6940) 在 clojure.lang.Compiler.resolve(Compiler.java) 的 clojure.lang.Util.runtimeException(Util.java:221) :6884) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6845) at clojure.lang.Compiler.analyze(Compiler.java:6427) ... 线程“main”中还有 153 个异常 java.lang.RuntimeException:无法解析符号:在这种情况下缺少必需的键,在 clojure.lang.Compiler.analyze(Compiler.java:6464) 在 clojure.lang.Compiler.analyze 编译:(server/api.clj:21:17) (Compiler.java:6406) 在 clojure.lang.Compiler$VectorExpr.parse(Compiler.java:3126) 在 clojure.lang.Compiler.analyze(Compiler.java:6447) 在 clojure.lang.Compiler.analyze(Compiler. java:6406) 在 clojure.lang.Compiler$MapExpr。clojure.lang.Compiler.analyze(Compiler.java:6406) 的 clojure.lang.Compiler.analyze(Compiler.java:6453) 的 parse(Compiler.java:2981).Compiler$MapExpr.parse(Compiler .java:2981) 在 clojure.lang.Compiler.analyze(Compiler.java:6453) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java: 3719) 在 clojure.lang.Compiler.access$100(Compiler.java:38) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在clojure. .lang.Compiler$LetExpr$Parser.parse(Compiler.java:6050) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure。 lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler。clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 的 clojure.lang.Compiler.analyze(Compiler.java:6406) 的分析(Compiler.java:6445) clojure.lang.Compiler.analyzeSeq(Compiler .java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler. java:5782) 在 clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6100) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang.Compiler.analyze(Compiler.java :6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6632) 在 clojure .lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure。lang.Compiler.analyzeSeq(Compiler.java:6644) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze(Compiler.java:6406) at clojure.lang.Compiler$BodyExpr $Parser.parse(Compiler.java:5782) 在 clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6100) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang。 Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze(Compiler .java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6100) 在 clojure.lang.Compiler。 clojure.lang.Compiler.analyze(Compiler.java: 中的 analyzeSeq(Compiler.java:6644)6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632)。 lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure.lang .Compiler$LetExpr$Parser.parse(Compiler.java:6100) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang。 Compiler.analyzeSeq(Compiler.java:6632) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) at clojure.lang.Compiler.analyze(Compiler .java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5782) 在 clojure.lang.Compiler$FnMethod.parse(Compiler.java:5217) 在 clojure.lang.Compiler$FnExpr.parse(Compiler .java:3846) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6642) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632)在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 在 clojure。 lang.Compiler.analyzeSeq(Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze (Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 在clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler .analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze(Compiler.java:6406) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq( Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java :3719) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 在clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler .analyze(Compiler.java:6445) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyze(Compiler. java:6406) 在 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) 在 clojure.lang.Compiler.analyze(Compiler.java:6445 ) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler $InvokeExpr.parse(Compiler.java:3719) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang.Compiler.analyzeSeq( Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.analyze(Compiler.java:6406) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler .java:5782) 在 clojure.lang.Compiler$FnMethod.parse(Compiler.java:5217) 在 clojure.lang.Compiler$FnExpr.parse(Compiler.java:3846) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6642) 在 clojure.lang.Compiler.analyze(Compiler.java:6445 ) 在 clojure.lang.Compiler.analyzeSeq(Compiler.java:6632) 在 clojure.lang.Compiler.analyze(Compiler.java:6445) 在 clojure.lang.Compiler.access$100(Compiler.java:38) 在 clojure。 lang.Compiler$DefExpr$Parser.parse(Compiler.java:538) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6644) at clojure.lang.Compiler.analyze(Compiler.java:6445) at clojure.lang .Compiler.analyze(Compiler.java:6406) at clojure.lang.Compiler.compile1(Compiler.java:7221) at clojure.lang.Compiler.compile(Compiler.java:7292) at clojure.lang.RT.compile( RT.java:398) 在 clojure.lang.RT.load(RT.java:438) 在 clojure.lang.RT.load(RT.java:411) at clojure.core$load$fn__5066.invoke(core.clj:5641) at clojure.lang.RestFn.invoke(core.clj:5641) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invoke(core.clj:5446) at clojure.core$compile$fn__5071.invoke(core.clj:5652) at clojure.core$compile.invoke(core.clj:5651) at user$eval9 $fn__16.invoke(form-init1857067608391167398.clj:1) 在用户 $eval9.invoke(form-init1857067608391167398.clj:1) 在 clojure.lang.Compiler.eval(Compiler.java:6703) 在 clojure.lang.Compiler。 eval(Compiler.java:6693) at clojure.lang.Compiler.load(Compiler.java:7130) at clojure.lang.Compiler.loadFile(Compiler.java:7086) at clojure.main$load_script.invoke(main.clj :274) 在 clojure 的 clojure.main$init_opt.invoke(main.clj:279) 在 clojure.main$initialize.invoke(main.clj:307)。main$null_opt.invoke(main.clj:342) at clojure.main$main.doInvoke(main.clj:420) at clojure.lang.RestFn.invoke(RestFn.java:421) at clojure.lang.Var.invoke (Var.java:383) 在 clojure.lang.AFn.applyToHelper(AFn.java:156) 在 clojure.lang.Var.applyTo(Var.java:700) 在 clojure.main.main(main.java:37)原因:java.lang.RuntimeException:无法解析符号:在 clojure.lang.Util.runtimeException(Util.java:221) 在 clojure.lang.Compiler.resolveIn(Compiler.java: 6940) 在 clojure.lang.Compiler.resolve(Compiler.java:6884) 在 clojure.lang.Compiler.analyzeSymbol(Compiler.java:6845) 在 clojure.lang.Compiler.analyze(Compiler.java:6427) ...还有 153 个编译失败:子进程失败420) 在 clojure.lang.AFn.applyToHelper(AFn.java:156) 在 clojure.lang.Var.invoke(Var.java:383) 在 clojure.lang.RestFn.invoke(RestFn.java:421) 在 clojure。 clojure.main.main(main.java:37) 处的 lang.Var.applyTo(Var.java:700) 原因:java.lang.RuntimeException:无法解析符号:clojure 在此上下文中缺少必需的键。 lang.Util.runtimeException(Util.java:221) at clojure.lang.Compiler.resolveIn(Compiler.java:6940) at clojure.lang.Compiler.resolve(Compiler.java:6884) at clojure.lang.Compiler.analyzeSymbol (Compiler.java:6845) at clojure.lang.Compiler.analyze(Compiler.java:6427) ... 153 更多编译失败:子进程失败420) 在 clojure.lang.AFn.applyToHelper(AFn.java:156) 在 clojure.lang.Var.invoke(Var.java:383) 在 clojure.lang.RestFn.invoke(RestFn.java:421) 在 clojure。 clojure.main.main(main.java:37) 处的 lang.Var.applyTo(Var.java:700) 原因:java.lang.RuntimeException:无法解析符号:clojure 在此上下文中缺少必需的键。 lang.Util.runtimeException(Util.java:221) at clojure.lang.Compiler.resolveIn(Compiler.java:6940) at clojure.lang.Compiler.resolve(Compiler.java:6884) at clojure.lang.Compiler.analyzeSymbol (Compiler.java:6845) at clojure.lang.Compiler.analyze(Compiler.java:6427) ... 153 更多编译失败:子进程失败applyTo(Var.java:700) at clojure.main.main(main.java:37) 原因:java.lang.RuntimeException:无法解析符号:clojure.lang.Util 的上下文中缺少所需的键。 runtimeException(Util.java:221) at clojure.lang.Compiler.resolveIn(Compiler.java:6940) at clojure.lang.Compiler.resolve(Compiler.java:6884) at clojure.lang.Compiler.analyzeSymbol(Compiler.java :6845) 在 clojure.lang.Compiler.analyze(Compiler.java:6427) ... 153 更多编译失败:子进程失败applyTo(Var.java:700) at clojure.main.main(main.java:37) 原因:java.lang.RuntimeException:无法解析符号:clojure.lang.Util 的上下文中缺少所需的键。 runtimeException(Util.java:221) at clojure.lang.Compiler.resolveIn(Compiler.java:6940) at clojure.lang.Compiler.resolve(Compiler.java:6884) at clojure.lang.Compiler.analyzeSymbol(Compiler.java :6845) 在 clojure.lang.Compiler.analyze(Compiler.java:6427) ... 153 更多编译失败:子进程失败6884) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6845) at clojure.lang.Compiler.analyze(Compiler.java:6427) ... 153 更多编译失败:子进程失败6884) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6845) at clojure.lang.Compiler.analyze(Compiler.java:6427) ... 153 更多编译失败:子进程失败
下面是我使用模式的源文件。为简洁起见,我省略了其余的源文件,但如果有人想查看其余部分,请询问。
(ns server.api
(:require [aleph.http :as http]
[compojure.api.sweet :refer :all]
[compojure.route :as route]
[com.stuartsierra.component :as component]
[ring.middleware.reload :refer [wrap-reload]]
[ring.util.http-response :refer :all]
[schema.core :as s]
[server.logging :refer [wrap-exception-logging wrap-request-logging] :as log]))
(s/defschema Greeting
{:hello s/Str
s/Keyword s/Any})
(defn app [db]
(api
{:format {:formats [:json-kw]}}
(middlewares [wrap-request-logging
wrap-exception-logging]
(swagger-ui "/docs" :swagger-docs "/endpoints")
(swagger-docs "/endpoints"
{:info {:title "Hello World Api"}})
(GET* "/greet" []
:summary "Greets someone by name."
:description "Greets a person by name, telling them about
the database configuration we're using as well."
:return Greeting
:query-params [name :- s/Str]
(ok {:hello name :with-db db}))
(route/not-found (not-found {:error "Page not found."})))))
(defrecord Api
[port env db logger]
component/Lifecycle
(start [{:keys [connection] :as component}]
(if connection
component
(do (log/info "Starting Api at port" port "with env" env)
(let [application (app db)
handler (if (= env :dev) (wrap-reload application) application)
conn (http/start-server handler {:port port :join? false})]
(assoc component :connection conn)))))
(stop [{:keys [connection] :as component}]
(if-not connection
component
(do (log/info "Stopping Api")
(.close connection)
(assoc component :connection nil)))))
(defn new-api [port env]
(->Api port env nil nil))
我已经尝试禁用 AOT 编译,因为这似乎是正常编译和构建 uberjar 之间的主要区别,但没有骰子。我还在 Schema 源代码中查找了 'missing-required-key' 键,并确保它被正确引用,这似乎是,因为如果我更改它,Schema 的测试开始失败。
与正常编译相比,创建 uberjar 时的编译过程还有什么不同?还有什么我可以尝试的吗?