为什么Java抱怨找不到命名空间?

时间:2012-10-04 00:10:53

标签: clojure leiningen

我正在尝试在Windows 7上设置lein构建环境,从Linux上的成功构建环境中复制文件。我有maven和jdk与lein一起安装。

HOME指向maven目录所在的c:\Users\cnorton

我在尝试运行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的标题作为答案发布,那么我会非常乐于助人。该文件可以让项目成为主要内容。

1 个答案:

答案 0 :(得分:6)

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

以下可能适用于您,也可能不适合您。我让你的骨架项目合作:

(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名称空间上引用another SO question

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

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