【问题标题】:How to add classpath with emacs slime/conjure?如何使用 emacs slime/conjure 添加类路径?
【发布时间】:2010-08-01 20:55:50
【问题描述】:

我按照here 的规定设置了 emacs slime/clojure。

当我运行 (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

如何为 clojure 添加 emacs/slime 的类路径?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    根据您是使用slime-connect 启动slime(例如,通过连接到使用lein swank 创建的远程swank 服务器)还是使用M-X slime 启动slime,该过程会有所不同。

    如果您使用slime-connect,则需要修改运行 swank 服务器的 java 进程的类路径。如果您使用 lein swank 启动 swank 服务器,只需将您希望成为类路径一部分的 jar 添加到项目的 lib 目录即可。

    另一方面,如果您使用 M-X slime 启动 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。)

    【讨论】:

    • .clojure 目录添加到路径有什么意义?此外,如果使用add-to-list,请考虑使用第三个APPEND 参数将这些条目添加到类路径的end。最后,如果 .emacs 文件不在load-path 上(通常是这种情况),load-library 将找不到它。您需要改用load-file
    【解决方案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,它还会检测您在该目录下的 jar。

    但是,如果您只是使用普通的\M-x slime 来触发 clojure repl,那么我认为没有“干净”的解决方案(除了将路径添加到全局环境的 $CLASSPATH 或使用一些 elisp voodoo -就像 seh 的答案中的那个 - 更改 java vm 命令参数。但我相信这只是为了做一些非常基本的实验,不应该用于任何基于项目的工作(正是因为这个原因!)

    【讨论】:

      【解决方案3】:

      如果您愿意对 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 样式的路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        相关资源
        最近更新 更多