关于使用clojure.tools.namespace

时间:2015-02-12 18:17:52

标签: emacs clojure read-eval-print-loop cider

在emacs cider repl中,现在我知道如何在 leiningen 项目中使用 clojure.tools.namespace 。但是,当我在不属于任何项目的单个 clj文件上使用它时,似乎 clojure.tools.namespace 对该文件不起作用:< / p>

=> #<FileNotFoundException java.io.FileNotFoundException: Could not locate com/foo__init.class or com/foo.clj on classpath: >

我在 .lein / profile.clj 中声明了 clojure.tools.namespace ,在clj文件中声明了require它。我应该如何使 clojure.tools.namespace 在单个clj文件上工作?

我的个人资料.clj

{:user
 {:repl-options {:timeout 128000}
  :plugins [;; REPL
            [cider/cider-nrepl "0.9.0-SNAPSHOT"]
            [refactor-nrepl "0.2.2"]

            ;; Application server
            [lein-immutant "2.0.0-SNAPSHOT"]

            ;; Automated testing
            [lein-cloverage "1.0.2"]
            [lein-test-out "0.3.1"]

            ;; Package management
            [lein-ancient "0.6.2"]
            [lein-clojars "0.9.1"]

            ;; Documentation
            [codox "0.6.8"]
            [lein-clojuredocs "1.0.2"]

            ;; Static analysis
            [lein-typed "0.3.4"]
            ;; [jonase/eastwood "0.1.2"]
            [lein-bikeshed "0.1.6"]
            [lein-kibit "0.0.8"]]

  :jvm-opts ["-Dapple.awt.UIElement=true"]

  :dependencies [[org.clojars.gjahad/debug-repl "0.3.3"]
                 [difform "1.1.2"]

                 [spyscope "0.1.4"]
                 [org.clojure/tools.trace "0.7.8"]

                 [org.clojure/tools.namespace "0.2.9"]
                 [im.chit/vinyasa "0.2.0"]
                 [slamhound "1.5.5"]

                 [criterium "0.4.3"]]

  :injections [(require 'spyscope.core)
               (require 'alex-and-georges.debug-repl)
               (require 'com.georgejahad.difform)
               (require '[vinyasa.inject :as inj])
               (inj/inject 'clojure.core '>
                           '[[clojure.repl apropos dir doc find-doc pst source]
                             [clojure.tools.trace trace trace-forms trace-ns trace-vars
                              untrace-ns untrace-vars]
                             [clojure.test run-tests run-all-tests]
                             [clojure.pprint pprint pp]
                             [com.georgejahad.difform difform]
                             [alex-and-georges.debug-repl debug-repl]
                             [vinyasa.pull pull]])]}}

1 个答案:

答案 0 :(得分:1)

虽然这不能回答您的具体问题,但它可能会提供一些想法 可能有帮助的替代工作流程。

  • lein-exec这是一个lein插件 允许您在命令行上编写clojure脚本或评估clojure表达式 类似于shell,python,ruby,perl等可以做的事情 当然,启动时间有点高,但这个插件会帮你处理 单个clj脚本文件中的依赖项等。 (还有其他可能的 解决方案,以提高启动速度)。有关示例,请参阅此博客文章 http://charsequence.blogspot.in/2012/04/scripting-clojure-with-leiningen-2.html

  • scratch 项目。我有一个相当通用的项目叫做scratch。它只是允许 我在项目的src目录中创建一个新文件,我可以用它 实验或示范。例如,我有一个名为stackoverflow.clj的文件 在这个临时项目中,我在制作一个clojure的答案时使用 关于堆栈溢出的问题。事实上,我有很多单独的clj文件 目录,每个只代表一个简单的想法,测试,实验等。它不是 实际上是一个项目,即我无法在项目的根目录中进行lein run 期待有意义的事。但是,我可以去emacs的源目录, 打开一个文件,然后运行苹果酒。