ELPA安装Clojure后,如何在Emacs中设置类路径?

9
我正在尝试在使用ELPA设置的Emacs中的Clojure REPL中添加路径到我的类路径中。显然,这不是$CLASSPATH环境变量,而是Swank设置的swank-clojure-classpath变量。因为我使用ELPA安装了Swank、Clojure等,所以有很多.el文件来处理所有事情,而不是我的.emacs文件。不幸的是,我现在无法弄清楚如何更改类路径。
我已经尝试在我的.emacs文件中的ELPA部分之前和之后使用(setq 'swank-clojure-extra-classpaths (list ...)),并尝试直接添加路径到.emacs、.emacs.d/init.el和.emacs.d/user/user.el中的swank-clojure-classpath,但都没有起作用。
我最终想要做的是将当前目录“.”和我保存Clojure程序的目录都添加到类路径中。我认为这里需要设置swank-clojure-classpath。谢谢你的帮助。
3个回答

10

如mac所说,您可以使用

M-x swank-clojure-project

建立一个Slime REPL到Clojure项目中;该命令将要求您提供项目根目录,并建立一个classpath,其中包括各种目录,包括src/ lib/ 和 resources/(如果存在)。

或者,如果您正在使用Leiningen,则可以在终端中使用以下命令启动它

$ lein swank

在项目的根目录下执行此命令,这将建立一个标准的项目类路径(如上所述)。从这里,您可以使用以下命令通过Emacs连接到正在运行的进程

M-x slime-connect

最后,我推荐第三个选项,使用Emacs/slime(使用M-x slime-connect)连接到由您自己的shell脚本启动的进程,该脚本指定了一组自定义的JVM命令行参数,例如:

#!/bin/bash 

java -server -cp "./lib/*":./src clojure.main -e "(do (require 'swank.swank) (swank.swank/start-repl))"

这样可以让您明确控制VM的启动方式,并且可能与您在生产中需要执行的操作相似。


3

您需要:

M-x swank-clojure-project

这将添加您/lib目录中的所有jar文件。

如果您想使用/foo目录中的clojure文件(例如bar.clj),则应执行以下操作:

(ns foo
  (:use foo.bar)) 

2

抱歉,我无法帮助您回答问题,但也许您的问题是错误的:

我自己很久没有从Emacs中启动clojure会话了。我认为更好的方法是在一个地方描述所有依赖关系(例如maven的pom.xml或leiningen的project.clj),然后使用这些依赖关系启动swank会话。即将swank-clojure库添加到您的(dev-)依赖项中,然后使用命令行上的lein swankmaven swank(不确定最后一个 - 我已经很久没有使用过了)来启动swank会话,并使用M-x slime-connect连接到该会话。

优点是您可以获得所需的所有类路径 - 而不是更多的类路径,因此您不能错误地在repl中使用某些项目不知道的东西。

这篇博客文章总结了如何正确执行此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接