Как добавить classpath с помощью слизи / колдовства в Emacs? - PullRequest
2 голосов
/ 02 августа 2010

Я устанавливаю emacs slime / clojure, как написано здесь .

Когда я запускаю (дозы q [p (.getURLs (java.lang.ClassLoader / getSystemClassLoader))]] (println (.getPath p))) чтобы получить 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

Как добавить classpath для emacs / slime для clojure?

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Процедура отличается в зависимости от того, используете ли вы slime-connect для запуска слизи (например, при подключении к удаленному серверу-swank, созданному с помощью lein swank) или вы запускаете слизь с помощью M-X slime.

Если вы используете slime-connect, вам нужно изменить путь к классу java-процесса, на котором работает сервер swank. Если вы запускаете сервер swank, используя lein swank, просто добавьте jar-файлы, которые вы хотите включить в ваш classpath, в каталог lib проекта.

С другой стороны, если вы запускаете slime с использованием 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, либо перезагрузить файл .emacs: введите M-X load-library, а затем введите .emacs в следующем приглашении.)

2 голосов
/ 02 августа 2010

Я полагаю, что рекомендуемый способ запуска повторяющихся реплик в настоящее время - использовать lein swank и \M-x slime-connect.См. http://github.com/technomancy/leiningen/ для подробного описания этого инструмента.

Используя leiningen, вы можете настроить свой проект, используя файл конфигурации, project.clj.В этом файле вам могут потребоваться удаленные (maven-) опубликованные файлы jar, и, запустив lein deps, вы получите каталог "lib" со всеми файлами jar.Поскольку команда lein swank использует этот каталог в качестве пути к классу, все, что вам нужно сделать, это добавить ваши jar-файлы в этот каталог.

Тем не менее, если вы все еще используете \M-x swank-clojure-project, он также обнаружит ваши jar-файлы в этом каталоге.

Однако, если вы просто используете простой \M-x slime для запуска repl clojure, тогда я думаю, что нет «чистого» решения (кроме добавления пути к $ CLASSPATH вашей глобальной среды или использования некоторогоelisp voodoo - как в ответе seh - для изменения аргументов команды java vm. Но я считаю, что это предназначено только для проведения некоторых довольно простых экспериментов и не должно использоваться для какой-либо работы на основе проекта (именно по этой причине!)

1 голос
/ 02 августа 2010

Если вы хотите жестко закодировать список файлов 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.Он используется Emacs для запуска процесса Java, который будет запускать в нем Clojure и Swank.

Существуют более сложные способы настройки пути к классам для проекта, например, включение путей в стиле Maven ниже назначенного корневого каталога проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...