进程哨兵错误:无法启动 nREPL 服务器:java.lang.NumberFormatException:无效数字

问题描述

我已经查看了有关堆栈溢出的所有类似问题。这是一个足够不同的问题,需要单独提出一个问题。基本上,我无法启动 repl 服务器,因为我收到以下错误。有人指出,这通常是一个依赖性问题,但据我所知,我已更新。我在这里出了什么问题?这是完整的错误

error in process sentinel: Could not start nREPL server: java.lang.NumberFormatException: Invalid number: 0.8.3
 at clojure.lang.LispReader.readNumber (LispReader.java:352)
    clojure.lang.LispReader.read (LispReader.java:278)
    clojure.lang.LispReader.readDelimitedList (LispReader.java:1398)
    clojure.lang.LispReader$VectorReader.invoke (LispReader.java:1347)
    clojure.lang.LispReader.read (LispReader.java:285)
    clojure.lang.LispReader.read (LispReader.java:216)
    clojure.lang.LispReader.read (LispReader.java:205)
    clojure.lang.RT.readString (RT.java:1878)
    clojure.lang.RT.readString (RT.java:1873)
    clojure.core$read_string.invokeStatic (core.clj:3815)
    clojure.core$read_string.invoke (core.clj:3805)
    clojure.core$mapv$fn__8445.invoke (core.clj:6912)
    clojure.core.protocols$fn__8159.invokeStatic (protocols.clj:168)
    clojure.core.protocols/fn (protocols.clj:124)
    clojure.core.protocols$fn__8114$G__8109__8123.invoke (protocols.clj:19)
    clojure.core.protocols$seq_reduce.invokeStatic (protocols.clj:31)
    clojure.core.protocols$fn__8146.invokeStatic (protocols.clj:75)
    clojure.core.protocols/fn (protocols.clj:75)
    clojure.core.protocols$fn__8088$G__8083__8101.invoke (protocols.clj:13)
    clojure.core$reduce.invokeStatic (core.clj:6828)
    clojure.core$mapv.invokeStatic (core.clj:6903)
    clojure.core$mapv.invoke (core.clj:6903)
    leiningen.update_in$parse_args.invokeStatic (update_in.clj:13)
    leiningen.update_in$parse_args.invoke (update_in.clj:9)
    leiningen.update_in$update_in.invokeStatic (update_in.clj:36)
    leiningen.update_in$update_in.doInvoke (update_in.clj:24)
    clojure.lang.RestFn.applyTo (RestFn.java:146)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$apply.invoke (core.clj:660)
    leiningen.core.main$partial_task$fn__7331.doInvoke (main.clj:284)
    clojure.lang.RestFn.applyTo (RestFn.java:139)
    clojure.lang.AFunction$1.doInvoke (AFunction.java:31)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.core$apply.invoke (core.clj:660)
    leiningen.core.main$apply_task.invokeStatic (main.clj:334)
    leiningen.core.main$apply_task.invoke (main.clj:320)
    leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343)
    leiningen.core.main$resolve_and_apply.invoke (main.clj:336)
    leiningen.core.main$_main$fn__7420.invoke (main.clj:453)
    leiningen.core.main$_main.invokeStatic (main.clj:442)
    leiningen.core.main$_main.doInvoke (main.clj:439)
    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:514)
    clojure.main$main_opt.invoke (main.clj:510)
    clojure.main$main.invokeStatic (main.clj:664)
    clojure.main$main.doInvoke (main.clj:616)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.main.main (main.java:40)

编辑:

所以我在这个问题上走得更远,我想我已经解决了最后一两个小问题。正在拉出导致 java.lang.NumberFormatException 的文件cider.el,您可以在 emacs.emacs.d\elpa\cider-[VERSION NUMBER,在我的情况下为 20210104.915] 中找到它。你打开你的 cider.el 文件在这个版本的第 392/393 行,你会发现:

(cider-add-to-alist 'cider-jack-in-dependencies "nrepl/nrepl" "0.8.3")

因此更改这一行,重新编译它,并重新加载 emacs 会得到抛出 java.lang.NumberFormatException 的数字以更改为我更改的任何内容(使用字节编译文件重新编译,按 Enter,然后将地址传递给它文件)。添加另一组双引号会得到排序的空值错误(显然),并且对异常进行任何类型的反斜杠和排序似乎都不能解决问题。因此,由于少数相关帖子(尽管细节少得多)似乎暗示要更改版本号,因此我将不得不假设我必须这样做。什么版本号最适合这里?

目前的临时解决方案:

在命令行中使用“lein repl”启动一个repl,并使用连接命令“cider-connect”手动连接到它并指定本地主机(我在与项目相同的目录中启动了repl,它很容易检测到)。作为永久解决方案,这对我来说还不够好,但让我暂时起身,直到找到更好的解决方案。

永久解决方案:

见下文

解决方法

看看你的依赖。我有一个问题,我的 java jdk 基本上坏了(就代码而言,是 java 的错,不是我的错)。我最终使用了最新的 OpenJDK(编号 15)。那奏效了。如果您遇到许多特定于 Java 的类型错误,并且这些错误会随着您使用的版本而改变,那么请考虑更新您的 Java jdk。我之前使用过 LTE 版本,最新版本修复了它。