无法在Macintosh系统上使用emacs + ritz-nrepl

时间:2013-02-26 16:44:15

标签: emacs clojure installation pallet

我无法让ritz-nrepl工作。这就是我所做的:

  1. 从一个干净的系统开始(在Mac OS X上,Mountain Lion) - 没有emacs.app,没有〜/ .emacs.d目录

  2. 按照https://github.com/pallet/ritz/tree/develop/nrepl上的说明操作(我将init.el文件放在〜/ .emacs.d中)

  3. 打开我的core.clj文件,然后运行M-x nrepl-ritz-jack-in

  4. 结果是一组错误消息:

    at clojure.core$load_lib.doInvoke(core.clj:5237)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invoke(core.clj:602)
    at clojure.core$load_libs.doInvoke(core.clj:5271)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:602)
    at clojure.core$require.doInvoke(core.clj:5352)
    at clojure.lang.RestFn.invoke(RestFn.java:436)
    at ritz.nrepl.project$eval3125$loading_\_4505_\_auto_\__\_3126.invoke(project.clj:1)
    at ritz.nrepl.project$eval3125.invoke(project.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6465)
    at clojure.lang.Compiler.eval(Compiler.java:6455)
    at clojure.lang.Compiler.load(Compiler.java:6902)
    at clojure.lang.RT.loadResourceScript(RT.java:357)
    at clojure.lang.RT.loadResourceScript(RT.java:348)
    at clojure.lang.RT.load(RT.java:427)
    at clojure.lang.RT.load(RT.java:398)
    at clojure.core$load$fn__4610.invoke(core.clj:5386)
    at clojure.core$load.doInvoke(core.clj:5385)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invoke(core.clj:5200)
    at clojure.core$load_lib.doInvoke(core.clj:5237)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invoke(core.clj:602)
    at clojure.core$load_libs.doInvoke(core.clj:5271)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:604)
    at clojure.core$use.doInvoke(core.clj:5363)
    at clojure.lang.RestFn.invoke(RestFn.java:930)
    at ritz.nrepl.debug_eval$eval2877$loading__4505__auto____2878.invoke(debug_eval.clj:1)
    at ritz.nrepl.debug_eval$eval2877.invoke(debug_eval.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6465)
    at clojure.lang.Compiler.eval(Compiler.java:6455)
    at clojure.lang.Compiler.load(Compiler.java:6902)
    at clojure.lang.RT.loadResourceScript(RT.java:357)
    at clojure.lang.RT.loadResourceScript(RT.java:348)
    at clojure.lang.RT.load(RT.java:427)
    at clojure.lang.RT.load(RT.java:398)
    at clojure.core$load$fn__4610.invoke(core.clj:5386)
    at clojure.core$load.doInvoke(core.clj:5385)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invoke(core.clj:5200)
    at clojure.core$load_lib.doInvoke(core.clj:5237)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invoke(core.clj:602)
    at clojure.core$load_libs.doInvoke(core.clj:5271)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:604)
    at clojure.core$use.doInvoke(core.clj:5363)
    at clojure.lang.RestFn.invoke(RestFn.java:3659)
    at ritz.nrepl$eval5$loading_\_4505_\_auto_\_\_\_6.invoke(nrepl.clj:1)
    at ritz.nrepl$eval5.invoke(nrepl.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6465)
    at clojure.lang.Compiler.eval(Compiler.java:6455)
    at clojure.lang.Compiler.load(Compiler.java:6902)
    at clojure.lang.RT.loadResourceScript(RT.java:357)
    at clojure.lang.RT.loadResourceScript(RT.java:348)
    at clojure.lang.RT.load(RT.java:427)
    at clojure.lang.RT.load(RT.java:398)
    at clojure.core$load$fn__4610.invoke(core.clj:5386)
    at clojure.core$load.doInvoke(core.clj:5385)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invoke(core.clj:5200)
    at clojure.core$load_lib.doInvoke(core.clj:5237)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invoke(core.clj:602)
    at clojure.core$load_libs.doInvoke(core.clj:5271)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:602)
    at clojure.core$require.doInvoke(core.clj:5352)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at user$eval1.invoke(NO_SOURCE_FILE:1)
    at clojure.lang.Compiler.eval(Compiler.java:6465)
    at clojure.lang.Compiler.eval(Compiler.java:6455)
    at clojure.lang.Compiler.eval(Compiler.java:6454)
    at clojure.lang.Compiler.eval(Compiler.java:6431)
    at clojure.core$eval.invoke(core.clj:2795)
    at clojure.main$eval_opt.invoke(main.clj:296)
    at clojure.main$initialize.invoke(main.clj:315)
    at clojure.main$null_opt.invoke(main.clj:348)
    at clojure.main$main.doInvoke(main.clj:426)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:405)
    at clojure.lang.AFn.applyToHelper(AFn.java:163)
    at clojure.lang.Var.applyTo(Var.java:518)
    at clojure.main.main(main.java:37)
    

    引起:java.lang.RuntimeException:无法在此上下文中解析符号:ex-info     at clojure.lang.Util.runtimeException(Util.java:156)     在clojure.lang.Compiler.resolveIn(Compiler.java:6720)     在clojure.lang.Compiler.resolve(Compiler.java:6664)     在clojure.lang.Compiler.analyzeSymbol(Compiler.java:6625)     在clojure.lang.Compiler.analyze(Compiler.java:6198)     ...... 171更多

  5. 调试

    我检查了是否已加载了正确的库:

    package-activated-list is a variable defined in `package.el'.
    Its value is (nrepl-ritz nrepl clojure-mode)
    

    在互联网上搜索时,我在https://groups.google.com/forum/?fromgroups=#!topic/clojure/KbVSpHG9Y8s

    找到了以下内容

    在这个帖子中,Hugo Duncan回复“Tim”:

    This [the error "Unable to resolve symbol: ex-info"] seems to be an issue 
    with clojure 1.4 not being used in the
    controlling vm, and should have been fixed by
    https://github.com/pallet/ritz/issues/53, which will be included in the
    next release.
    

    网页https://github.com/pallet/ritz/issues/53是一个题为“使用lein ritz-nrepl从classpath中丢失的tools.jar”的问题,其解决方法是:

    "Ensure tools.jar is on the classpath with lein ritz-nrepl"
    

    在Mac OS X上,这很棘手,但我终于在Emacs中验证了$ PATH是:

    "/bin/bash /Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home:
    /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:"
    

    当我在Emacs中运行M-x nrepl-ritz-jack-in时,我得到与上面相同的错误。 (我也验证,在我的Mac上,/ Library / Java / JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home/bin/tools.jar实际上存在。)

    现在,$ PATH输出中的空格字符让我担心。我再次阅读“确保tools.jar ...”消息,看到它告诉我如果lein ritz-nrepl正确运行,那意味着“tools.jar在类路径上”。这是我的输出:

    Greggs-Mac-Pro:src gr$ cd /Users/gr/tech/cljprojects/combolock/src/combolock
    Greggs-Mac-Pro:combolock gr$ ls
    core.clj    core.clj~
    Greggs-Mac-Pro:combolock gr$ $PATH
    -bash: /Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin: No such file or directory
    Greggs-Mac-Pro:combolock gr$ lein ritz-nrepl
    Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: ex-info in this context, compiling:(leiningen/core/classpath.clj:128)
        at clojure.lang.Compiler.analyze(Compiler.java:6235)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3452)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6411)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$ThrowExpr$Parser.parse(Compiler.java:2239)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$TryExpr$Parser.parse(Compiler.java:2117)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:5873)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5008)
        at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3629)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6407)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.access$100(Compiler.java:37)
        at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:492)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler.eval(Compiler.java:6469)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.RT.loadResourceScript(RT.java:357)
        at clojure.lang.RT.loadResourceScript(RT.java:348)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:398)
        at clojure.core$load$fn__4610.invoke(core.clj:5386)
        at clojure.core$load.doInvoke(core.clj:5385)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5200)
        at clojure.core$load_lib.doInvoke(core.clj:5237)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$load_libs.doInvoke(core.clj:5271)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$require.doInvoke(core.clj:5352)
        at clojure.lang.RestFn.invoke(RestFn.java:703)
        at leiningen.core.project$eval3195$loading__4505__auto____3196.invoke(project.clj:1)
        at leiningen.core.project$eval3195.invoke(project.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:6465)
        at clojure.lang.Compiler.eval(Compiler.java:6455)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.RT.loadResourceScript(RT.java:357)
        at clojure.lang.RT.loadResourceScript(RT.java:348)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:398)
        at clojure.core$load$fn__4610.invoke(core.clj:5386)
        at clojure.core$load.doInvoke(core.clj:5385)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5200)
        at clojure.core$load_lib.doInvoke(core.clj:5237)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$load_libs.doInvoke(core.clj:5271)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$require.doInvoke(core.clj:5352)
        at clojure.lang.RestFn.invoke(RestFn.java:551)
        at leiningen.core.main$eval3131$loading__4505__auto____3132.invoke(main.clj:1)
        at leiningen.core.main$eval3131.invoke(main.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:6465)
        at clojure.lang.Compiler.eval(Compiler.java:6455)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.RT.loadResourceScript(RT.java:357)
        at clojure.lang.RT.loadResourceScript(RT.java:348)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:398)
        at clojure.core$load$fn__4610.invoke(core.clj:5386)
        at clojure.core$load.doInvoke(core.clj:5385)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5200)
        at clojure.core$load_lib.doInvoke(core.clj:5237)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$load_libs.doInvoke(core.clj:5271)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$require.doInvoke(core.clj:5352)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at ritz.nrepl.project$eval3125$loading__4505__auto____3126.invoke(project.clj:1)
        at ritz.nrepl.project$eval3125.invoke(project.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:6465)
        at clojure.lang.Compiler.eval(Compiler.java:6455)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.RT.loadResourceScript(RT.java:357)
        at clojure.lang.RT.loadResourceScript(RT.java:348)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:398)
        at clojure.core$load$fn__4610.invoke(core.clj:5386)
        at clojure.core$load.doInvoke(core.clj:5385)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5200)
        at clojure.core$load_lib.doInvoke(core.clj:5237)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$load_libs.doInvoke(core.clj:5271)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:604)
        at clojure.core$use.doInvoke(core.clj:5363)
        at clojure.lang.RestFn.invoke(RestFn.java:930)
        at ritz.nrepl.debug_eval$eval2877$loading__4505__auto____2878.invoke(debug_eval.clj:1)
        at ritz.nrepl.debug_eval$eval2877.invoke(debug_eval.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:6465)
        at clojure.lang.Compiler.eval(Compiler.java:6455)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.RT.loadResourceScript(RT.java:357)
        at clojure.lang.RT.loadResourceScript(RT.java:348)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:398)
        at clojure.core$load$fn__4610.invoke(core.clj:5386)
        at clojure.core$load.doInvoke(core.clj:5385)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5200)
        at clojure.core$load_lib.doInvoke(core.clj:5237)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$load_libs.doInvoke(core.clj:5271)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:604)
        at clojure.core$use.doInvoke(core.clj:5363)
        at clojure.lang.RestFn.invoke(RestFn.java:3659)
        at ritz.nrepl$eval5$loading__4505__auto____6.invoke(nrepl.clj:1)
        at ritz.nrepl$eval5.invoke(nrepl.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:6465)
        at clojure.lang.Compiler.eval(Compiler.java:6455)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.RT.loadResourceScript(RT.java:357)
        at clojure.lang.RT.loadResourceScript(RT.java:348)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:398)
        at clojure.core$load$fn__4610.invoke(core.clj:5386)
        at clojure.core$load.doInvoke(core.clj:5385)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5200)
        at clojure.core$load_lib.doInvoke(core.clj:5237)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$load_libs.doInvoke(core.clj:5271)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:602)
        at clojure.core$require.doInvoke(core.clj:5352)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at user$eval1.invoke(NO_SOURCE_FILE:1)
        at clojure.lang.Compiler.eval(Compiler.java:6465)
        at clojure.lang.Compiler.eval(Compiler.java:6455)
        at clojure.lang.Compiler.eval(Compiler.java:6454)
        at clojure.lang.Compiler.eval(Compiler.java:6431)
        at clojure.core$eval.invoke(core.clj:2795)
        at clojure.main$eval_opt.invoke(main.clj:296)
        at clojure.main$initialize.invoke(main.clj:315)
        at clojure.main$null_opt.invoke(main.clj:348)
        at clojure.main$main.doInvoke(main.clj:426)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at clojure.lang.Var.invoke(Var.java:405)
        at clojure.lang.AFn.applyToHelper(AFn.java:163)
        at clojure.lang.Var.applyTo(Var.java:518)
        at clojure.main.main(main.java:37)
    Caused by: java.lang.RuntimeException: Unable to resolve symbol: ex-info in this context
        at clojure.lang.Util.runtimeException(Util.java:156)
        at clojure.lang.Compiler.resolveIn(Compiler.java:6720)
        at clojure.lang.Compiler.resolve(Compiler.java:6664)
        at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6625)
        at clojure.lang.Compiler.analyze(Compiler.java:6198)
        ... 171 more
    Subprocess failed
    Greggs-Mac-Pro:combolock gr$ 
    

    如果你看到最底部和最顶部,你会发现:

    1. 我仍然得到相同的“无法解析符号:ex-info”错误消息

    2. 当前目录是我的src Leiningen 2项目的combolock目录(是的,lein2,而不是lein1)

    3. 路径包含/Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home,据我所知,它与Windows机器上的$ JAVA_HOME相同

    4. 请求

      所以,据我所知,tools.jar 可用,但我仍然会收到“无法解析符号:ex-info”错误。

      已经很晚了,我累了,我希望有人会看到我不知道的东西。感谢。

2 个答案:

答案 0 :(得分:0)

您安装了最新版本的nrepl-ritz.el吗?您的案例似乎与https://github.com/pallet/ritz/issues/53中讨论的问题相同。

答案 1 :(得分:0)

事实:lein ritz-nrepl已经返回错误。在一个模糊思维直觉的时刻,我想到这可能意味着潜在的问题与 Java 有关,而不是Emacs。我在StackExchange“Ask Different”(Apple-oriented)网站上调查了这一点,并了解了Mac OS X系统如何“找到”Java(特别是因为Java 6 - 来自Apple - 以及Java 7 - 来自Oracle - 安装在我的系统上)。这令人困惑。

最终,Apple的做事方式 完美运作。通过手动更改PATH自定义文件中.bash_profile的值,我犯了错误。删除已修改PATH的行后,lein ritz-nrepl工作,并且在Emacs中,M-x nrepl-ritz-jack-in第一次工作!糟糕!