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

oct*_*bus 5 clojure leiningen

我试图在Windows 7上建立一个lein构建环境,从Linux上的成功构建环境中复制文件.我有maven和jdk与lein一起安装.

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

我在尝试运行lein repl或lein编译时遇到此错误,并且无法弄清楚我做错了什么.

引起: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)
Run Code Online (Sandbox Code Playgroud)

这是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))
Run Code Online (Sandbox Code Playgroud)

如果有人可以将project.clj和core.clj的标题作为答案发布,那么我会非常乐于助人.

Nic*_*zyk 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)
Run Code Online (Sandbox Code Playgroud)

与您相同的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))
Run Code Online (Sandbox Code Playgroud)

我用repcorerepl-test文件夹重命名为repl_test.

然后

 lein compile
Run Code Online (Sandbox Code Playgroud)

 lein run
Run Code Online (Sandbox Code Playgroud)

由于好奇,我还看了一下clojure-csv,除了文件夹名称之外,他们在任何地方都使用" - ",所以可能有运气复制他们所做的事情.

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

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

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