2010-03-07 49 views
9

我试图在我使用ELPA在Emacs中设置的Clojure REPL中将类路径添加到我的类路径中。显然,这不是$ CLASSPATH环境变量,而是Swank设置的swank-clojure-classpath变量。因为我使用ELPA来安装Swank,Clojure等,所以有很多.el文件可以处理所有内容,而不是我的.emacs文件。不幸的是,我现在无法弄清楚如何改变类路径。在使用ELPA进行安装后,如何在Emacs中设置Clojure类路径?

我试过在我的.emacs中使用(setq'swank-clojure-extra-classpaths(list ...))ELPA东西之前和之后,并且我尝试了直接向swank-clojure添加路径.emacs,.emacs.d/init.el和.emacs.d/user/user.el中的-classpath,但没有任何效果。

我最终试图做的是添加当前目录“。”。以及我保存Clojure程序的目录。我假设swank-clojure-classpath是我需要在这里设置的东西。谢谢你的帮助。

回答

10

因为Mac说,你可以使用

M-x swank-clojure-project 

建立了煤泥REPL到Clojure的项目;该命令会询问您的项目根目录,并将建立一个包含各种目录的类路径,包括src/lib /和resources /(如果它们存在)。

或者,如果你正在使用leiningen,你就可以开始在终端用命令

$ lein swank 

从项目的根目录中。这将建立一个标准的项目类路径(如上)。在这里,您可以用命令

M-x slime-connect 

最后,我建议你第三个选择是通过Emacs的连接/泥(用M-x slime-connect)通过Emacs的连接到这个正在运行的进程,以通过自己的shell脚本启动的进程它指定了一组自定义的JVM命令行参数,例如

#!/bin/bash 

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

这可以让你在虚拟机是如何启动的明确的控制,而且很可能类似于您将有可能在生产做无妨。

3

你想:

M-x swank-clojure-project 

这增加了所有罐子在你的/ lib目录。

如果你想:使用Clojure的文件(bar.clj),在例如/ foo的你会怎么做:

(ns foo 
    (:use foo.bar)) 
2

对不起,我不能帮你一个答案,但也许你的问题是错误的:

我自己还没有从Emacs内部开始clojure会话多年。我认为更好的方法是在一个地方描述所有的依赖关系(例如,maven pom.xml或leiningen的project.clj),然后开始一个swank会话与这些依赖关系。即将swank-clojure lib添加到您的(dev-)依赖项中,然后从命令行使用lein swankmaven swank(不确定最后一个 - 没有用过这么多,也没有一段时间),以启动swank会话并使用M-x slime-connect附加到该会话。

好处是,你可以在你的类路径中获得所有你需要的东西 - 而不是更多,所以你不能错误地使用你最终项目不知道的repl中的东西。

This blog post gives a good summary how to do this right.

相关问题