2010-03-07 3 views
9

ELPA를 사용하여 Emacs에서 설정 한 Clojure REPL의 클래스 경로에 경로를 추가하려고합니다. 명백하게 이것은 $ CLASSPATH 환경 변수가 아니라 Swank가 설정하는 swank-clojure-classpath 변수입니다. ELPA를 사용하여 Swank, Clojure 등을 설치했기 때문에 .emacs 파일 대신 모든 .el 파일이 처리됩니다. 불행히도 클래스 패스를 변경하는 방법을 지금은 알 수 없습니다.ELPA로 설치 한 후 어떻게 Emacs에서 Clojure 클래스 경로를 설정합니까?

필자는 .emacs에서 ELPA 항목 전후에 (setq 'swank-clojure-extra-classpaths (list ...))를 사용해 보았고 swank-clojure에 직접 경로를 추가하려고 시도했습니다. .emacs, .emacs.d/init.el 및 .emacs.d/user/user.el의 -classpath.하지만 아무 것도 작동하지 않습니다.

내가 궁극적으로 시도한 것은 현재 디렉토리 "." 내 Clojure 프로그램을 유지하는 디렉토리. 나는 swank-clojure-classpath가 내가 여기에 설정할 필요가 있다고 가정하고있다. 당신의 도움을 주셔서 감사합니다.

답변

10

는 맥을 사용하면 Clojure의 프로젝트에 점액 REPL을 설정

M-x swank-clojure-project 

을 사용할 수 있습니다, 말하기를, 이 명령은 프로젝트의 루트 디렉토리를 물어보고 src/lib /와 resources /가있는 경우 다양한 디렉토리를 포함하는 클래스 경로를 설정합니다. 당신이 leiningen를 사용하는 경우

또는, 명령 프로젝트 루트 디렉토리 내부에서

$ lein swank 

와 터미널에 그를 시작할 수 있습니다. 이렇게하면 표준 프로젝트 클래스 경로가 설정됩니다 (위와 같음).여기에서 당신은 당신의 자신의 쉘 스크립트에 의해 시작 프로세스에 (M-x slime-connect와)

M-x slime-connect 

마지막으로 내가 권하고 싶습니다 세 번째 옵션 이맥스를 통해 연결하는 것입니다 명령/점액 이맥스를 통해이 실행중인 프로세스에 연결할 수 있습니다 예 : JVM 명령 행 인수의 사용자 정의 세트 지정

#!/bin/bash 

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

이렇게하면 VM 시작 방법을 명시 적으로 제어 할 수 있으며 어쨌든 프로덕션 환경에서 수행해야 할 작업과 비슷할 수 있습니다.

3

당신이 원하는 : 이것은 당신의/lib 디렉토리 디렉토리에있는 모든 단지를 추가

M-x swank-clojure-project 

. 당신이 할 경우

을 :

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

미안 답변에 당신을 도울 수는 없지만, 어쩌면 당신의 질문은 잘못된 것입니다 : 예/foo에 대한에하는 Clojure의 파일 (bar.clj)를 사용하여 당신이 할 것 :

나 자신이 Emacs에서 여러 연령대의 clojure 세션을 시작하지 않았다. 더 좋은 방법은 모든 의존성을 단일 장소 (예 : pom.xml 또는 leiningen의 project.clj)에 기술 한 다음 해당 종속성으로 시작 세션을 시작하는 것입니다. 나는. swank-clojure lib를 (dev-) 종속성에 추가 한 다음 lein swank 또는 maven swank (마지막에 대해 잘 모름 - 그다지 많이 사용하지 않고 잠시 동안 사용하지 않음)을 명령 줄에서 사용하여 M-x slime-connect을 사용하십시오 해당 세션에 첨부하십시오.

장점은 클래스 패스에서 필요한 모든 것을 얻을 수 있다는 것입니다. 더 이상은 아니므로 최종 프로젝트가 알지 못하는 repl에서 실수로 사용할 수는 없습니다.

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

관련 문제