首页 文章

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

提问于
浏览
5

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

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

我在尝试运行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)

这是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的 Headers 作为答案发布,那么我会非常乐于助人 .

1 回答

  • 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项目)在一个名为cool_project.clj的文件中,名为my) . “

    从java包的Clojure Programming Wiki部分:"Clojure respects Java naming conventions for directories and files, but Lisp naming conventions for namespace names. So a Clojure namespace com.my-app.utils would live in a path named com/my_app/utils.clj. Note especially the underscore/hyphen distinction."

相关问题