【问题标题】:Clojure load filesClojure 加载文件
【发布时间】:2011-02-24 05:31:21
【问题描述】:

我正在尝试建立一个简单的 clojure 项目,但我不确定如何在项目之间加载文件。我确定答案在文档中,但我在任何地方都找不到简单的答案,而且我不确定在哪里寻找。

基本上,我的目录如下所示:

Clojure/
    clojure/
        clojure.jar
        other clojure files
    clojure-contrib/
        clojure-contrib.jar
        other contrib files
    project/
        main.clj
        utils.clj

我希望 main.clj 是这样的:

(ns project.main
  (:require project.utils))
(greet)

和 utils.clj 是这样的:

(ns project.utils)
(defn greet [] (println "Hello, World!"))

但这失败了:

Exception in thread "main" java.io.FileNotFoundException: Could not locate project/utils__init.class or project/utils.clj on classpath:  (main.clj:1)

当我尝试运行它时。我的类路径包括顶部 Clojure/ 目录和两个 jar。我也尝试将project/ 目录也放在类路径中,但没有成功。

如何建立一个简单的 clojure 项目?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    您没有提及您的环境是什么(即 Emacs/SLIME/Swank、vim/Vimclojure),所以我假设您正在尝试从命令行调用它。

    你需要在类路径中有你的Clojure/项目目录:

    java -cp path/to/clojure.jar:path/to/clojure-contrib.jar:path/to/Clojure ...
    

    确保检查相对于当前工作目录的路径是否正确。它需要指向你命名空间的根目录(即如果在Clojure/ 中运行,则路径为.)。

    事实上,你的项目布局在我的机器上工作(tm),除了我有use 而不是require (但如果你在 Clojure可以找到你所有的文件)。

    【讨论】:

    • 谢谢。原来我的问题是因为我在project/ 中运行,所以我需要将.. 添加到类路径中。它现在正在工作。顺便说一下,Vim\VimClojure。 :)
    【解决方案2】:

    This answer 我发布到另一个问题应该希望让您了解您的文件名应该如何与命名空间名称相关,以便工作。但是,由于您的问题是“如何建立一个简单的 Clojure 项目”,所以下面是一个更好的开始:

    1. 转到 GitHub 并获取 Leiningen

    2. 按照自述文件中的说明进行操作。你最终会做类似的事情

      $ lein new my-project
      $ cd my-project
      # ... edit project.clj ...
      $ lein deps
      
    3. 滚开!您需要将文件放在正确的位置。这意味着将您的源文件放在以my-project/src 为根的目录树中,您的核心命名空间很可能位于my-project/src/my_project/core.clj。但实际上,我已经在the answer linked to above 中解释了所有细节,所以请阅读它(如果我遗漏了什么,请发表评论)。 :-)

    Leiningen 将负责基本项目布局并为您设置 REPL / swank / nailgun 的类路径(如果您还没有遇到后两者,您很快就会遇到 - 但这是一个单独的主题,我已经在一定程度上涵盖了其中的时髦部分,例如in this SO answer),所以希望你永远不需要手动处理java -cp ... 的废话。 (我在最后一个括号中链接到的与 swank 相关的答案详细说明了如何在 Emacs 中使用正确的类路径设置 swank。)

    【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2011-12-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多