2010-03-07 41 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.

相關問題