2010-08-01 22 views
2

我將emacs slime/clojure設置爲here。當我運行(doseq [p(.getURLs(java.lang.ClassLoader/getSystemClassLoader))](println(.getPath p)))來獲取類路徑時,我得到以下內容。如何用emacs slime/conjure添加classpath?

 
/Users/smcho/.swank-clojure/clojure-1.1.0-master-20091202.150145-1.jar 
/Users/smcho/.swank-clojure/clojure-contrib-1.1.0-master-20091212.205045-1.jar 
/Users/smcho/.swank-clojure/swank-clojure-1.1.0.jar 

如何爲clojure添加emacs/slime的classpath?

回答

3

程序根據您是否使用slime-connect啓動粘液(例如通過連接到遠程swank服務器,例如使用lein swank創建)或者您使用M-X slime開始粘液而定。

如果您使用的是slime-connect,則需要修改運行swank服務器的java進程的類路徑。如果您使用lein swank啓動swank服務器,只需將您想要成爲類路徑一部分的罐添加到項目的lib目錄。另一方面,如果你使用M-X slime開始粘泥,下面的elisp代碼將爲你做出魔法(只要將它放在〜/ .emacs文件中)。

(eval-after-load "swank-clojure" 
    '(progn 
    (add-to-list 'swank-clojure-classpath 
      "/Users/smcho/.clojure/") 
    (add-to-list 'swank-clojure-classpath 
      "/Users/smcho/.clojure/blah.jar"))) 

這將增加/Users/smcho/.clojure//Users/smcho/.clojure/blah.jar到classpath中。 (請注意,您需要重新啓動emacs或重新加載。emacs文件:輸入M-X load-library,然後在下一個提示符下輸入.emacs。)

+0

將* .clojure *目錄添加到路徑中有什麼意義?另外,如果使用'add-to-list',考慮使用第三個* APPEND *參數將這些條目添加到類路徑的* end *。最後,如果* .emacs *文件不在'load-path'上(通常是這種情況),'load-library'將不會找到它。你需要使用'load-file'來代替。 – seh 2010-08-01 22:25:56

1

如果你願意硬編碼的Jar文件列表中,這個的Emacs Lisp形式應該足夠了:

(let ((base-path "/Users/smcho/.swank-clojure")) 
    (setq swank-clojure-classpath 
     (append 
     swank-clojure-classpath 
     (mapcar (lambda (d) 
        (expand-file-name d base-path)) 
       '("clojure-1.1.0-master-20091202.150145-1.jar" 
        "clojure-contrib-1.1.0-master-20091212.205045-1.jar" 
        "swank-clojure/swank-clojure-1.1.0.jar"))))) 

這需要你的jar文件的列表,並將它們添加到變量swank-clojure-classpath。請注意,此表格必須由Emacs進行評估,而不是SLIME的Swank。它被Emacs用來啓動運行Clojure和Swank的Java進程。

還有更復雜的方法來設置項目的類路徑,例如在指定的項目根目錄下包含Maven樣式的路徑。

2

我相信建議的方式來激活現在的clojure reple是使用lein swank,並使用\M-x slime-connect。有關此工具的詳細說明,請參閱http://github.com/technomancy/leiningen/

使用leiningen,您可以使用配置文件project.clj來配置您的項目。在這個文件中,您可能需要遠程(maven)發佈的jar文件,並運行lein deps,您將得到一個包含所有jar的「lib」目錄。由於lein swank命令使用該目錄作爲類路徑,所以您只需將您的jar添加到該目錄即可。

也就是說,如果您仍在使用\M-x swank-clojure-project,它還會在該目錄下檢測到您的罐子。然而,如果你只是使用普通的\M-x slime來觸發一個clojure repl,那麼我認爲沒有「乾淨」的解決方案(除了在你的全局環境的$ CLASSPATH中添加路徑或者使用一些elisp voodoo之外 - 比如在seh的答案中的一個 - 改變java vm命令參數,但我相信這只是爲了做一些非常基本的實驗,不應該用於任何基於項目的工作(完全是這個原因!)

相關問題