2010-08-01 3 views
2

I emacs slime/clojure를 here으로 설정하십시오.emacs slime/conjure를 사용하여 classpath를 추가하는 방법은 무엇입니까?

classpath를 얻기 위해 (doseq [p (.getURLs (java.lang.ClassLoader/getSystemClassLoader))] (println (.getPath p)))를 실행하면 다음과 같은 결과를 얻습니다.

 
/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 

클로저에 emacs/슬라임의 클래스 경로를 추가하려면 어떻게해야합니까? 당신이 하드 코드 jar 파일의 목록에 기꺼이하는 경우

답변

3

절차는 slime-connect을 사용하여 슬라임을 시작하는지 (예 : lein swank으로 생성 된 원격 서버에 연결하여) 또는 을 사용하여 점액을 시작하는지에 따라 다릅니다.

slime-connect을 사용하는 경우, swank 서버를 실행중인 java 프로세스의 클래스 경로를 수정해야합니다. lein swank을 사용하여 swank 서버를 시작하려면 클래스 패스에 포함시킬 jar 파일을 프로젝트의 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을 추가합니다. (이맥스를 다시 시작하거나를 다시로드해야합니다.emacs 파일 : M-X load-library을 입력 한 후 다음 프롬프트에 .emacs을 입력하십시오.

+0

* .clojure * 디렉토리를 경로에 추가 할 때의 요점은 무엇입니까? 또한,'add-to-list'를 사용한다면, 세번째 * APPEND * 인자를 사용하여 클래스 경로의 * end *에 이들 항목을 추가하는 것을 고려하십시오. 마지막으로, * .emacs * 파일이'load-path'에 없으면,'load-library'는 찾지 못합니다. 대신에'load-file'을 사용해야합니다. – seh

1

이 이맥스 리스프 양식은 충분합니다 : Jar 파일의 목록을 가져 와서 변수 swank-clojure-classpath에 추가

(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"))))) 

합니다. 이 양식은 SLIME의 Swank가 아니라 Emacs으로 평가해야합니다. Emacs는 Clojure와 Swank를 실행하는 Java 프로세스를 시작하기 위해 이맥스에서 사용합니다.

지정된 프로젝트 루트 디렉토리 아래에 Maven 스타일 경로를 포함하는 것과 같이 프로젝트의 클래스 경로를 설정하는 데 더 정교한 방법이 있습니다.

2

요즘은 클로저를 사용하는 것이 좋습니다. lein swank을 사용하고 \M-x slime-connect을 사용하는 것이 좋습니다. 이 도구에 대한 자세한 설명은 http://github.com/technomancy/leiningen/을 참조하십시오.

leiningen을 사용하여 구성 파일 인 project.clj를 사용하여 프로젝트를 구성 할 수 있습니다. 이 파일에서 원격으로 (게시판에) 게시 된 jar를 요구할 수 있으며, lein deps을 실행하면 모든 jar 파일과 함께 "lib"디렉토리가 생성됩니다. lein swank 명령은 해당 디렉토리를 클래스 경로로 사용하기 때문에 수행해야 할 일은 해당 디렉토리에 항아리를 추가하는 것입니다.

즉, 여전히 \M-x swank-clojure-project을 사용하는 경우 해당 디렉토리 아래에있는 jar도 감지합니다.

그러나 단지 평범한 \M-x slime을 사용하여 clojure repl을 실행하는 경우 전역 환경의 $ CLASSPATH에 경로를 추가하거나 일부 elisp 부두를 사용하는 것 외에는 "깨끗한"해결책이 없다고 생각합니다. seh의 답변에서 하나 - 자바 VM 명령 인수를 변경합니다.하지만 이것은 아주 기본적인 실험을하기위한 것이며, 어떤 프로젝트 기반 작업에도 사용해서는 안된다고 생각합니다. (정확하게이 이유 때문에!)

관련 문제