6

我正在尝试在 Windows 7 上设置 lein 构建环境,并从 Linux 上成功的构建环境中复制了文件。我已经安装了 maven 和 jdk 以及 lein。

HOME 指向c:\Users\cnortonmaven 目录所在的位置。

尝试运行 lein repl 或 lein compile 时出现此错误,并且无法弄清楚我做错了什么。

原因:java.lang.Exception:加载“/repl_test/core”后找不到命名空间“repl-test.core”

这是project.clj

(defproject repl-test "0.0.1-SNAPSHOT"
  :description "TODO: add summary of your project"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [clojure-csv/clojure-csv "1.2.4"]
                 [org.clojure/tools.cli "0.1.0"]
                 [clj-http "0.1.3"]]
   :aot [repl-test.core]
   :main repl-test.core)

这是 src/repl_test/core.clj 的第一部分

(ns repl-test.core
  (:gen-class)
  (:use clojure.contrib.command-line)
  (:require [clojure.contrib.string :as cstr])
  (:require [clojure.contrib.trace :as ctr])
  (:require [clojure.string :as sstr])
  (:use clojure-csv.core))

如果有人可以将 project.clj 和 core.clj 的标题作为答案发布,我会非常有帮助,它允许该项目成为主要项目。

4

1 回答 1

7

我会避免在您的文件夹名称和名称空间中使用“-”,它实际上已转换为“_”,但并非在所有地方。

以下内容可能适合您,也可能不适合您。我让你的骨架项目与:

(defproject st1 "1.0.0-SNAPSHOT"
:description "TODO: add summary of your project"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [clojure-csv/clojure-csv "1.2.4"]
                 [org.clojure/tools.cli "0.1.0"]
                 [clj-http "0.1.3"]]
                 :aot [repl_test.core]
                 :main repl_test.core)

与您相同的 clj 文件:

 (ns repl_test.core
  (:gen-class)
  (:use clojure.contrib.command-line)
  (:require [clojure.contrib.string :as cstr])
  (:require [clojure.contrib.trace :as ctr])
  (:require [clojure.string :as sstr])
  (:use clojure-csv.core))

我用下划线将文件夹repl-test重命名为repl_test

然后

 lein compile

 lein run

出于好奇,我还查看了clojure-csv,他们在所有地方都使用“-”,除了在文件夹名称中,所以可能有幸复制他们所做的事情。

另外,引用另一个关于 clojure 命名空间的SO 问题:

“还请注意,您不得在命名空间名称中使用下划线或在文件名中使用连字符,并且无论您在命名空间名称中使用连字符的任何位置,都必须在文件名中使用下划线(以便定义 ns my.cool-project在名为 my) 的目录中名为 cool_project.clj 的文件中。”

并且来自 java 包的Clojure 编程 Wiki部分:“Clojure 尊重目录和文件的 Java 命名约定,但命名空间名称的 Lisp 命名约定。因此,Clojure 命名空间 com.my-app.utils 将存在于名为 com/my_app 的路径中/utils.clj。特别注意下划线/连字符的区别。”

于 2012-10-04T05:34:07.220 回答