也许我错过了一些东西或只是阅读过时的信息。基本上,我正在尝试使用CSV lib here。
我已将它包含在我的project.clj ...
中:dependencies [[org.clojure/clojure "1.3.0"]
[org.clojure/data.csv "0.1.2"]]
...并使用Leiningen成功检索了libs。现在,将这个lib包含在我的程序中的正确方法是什么?我已经尝试在lib的Github页面上发布的示例只是为了得到一个错误说明:
FileNotFoundException Could not locate clojure/data/csv__init.class or clojure/data/csv.clj on classpath: clojure.lang.RT.load (RT.java:430)
编辑:进一步澄清我尝试过的内容:我将代码粘贴在我的命名空间声明中,如下所示:
(ns testprogram.core(:gen-class))
(require '[clojure.data.csv :as csv]
'[clojure.java.io :as io])
在REPL中尝试它会产生相同的结果。我很确定我试图“包括”他们错了。
答案 0 :(得分:1)
您可以尝试以下操作:注意:require嵌套在ns声明中。这是这样做的首选方式。
(ns testprogram.core(:gen-class)
(:require [clojure.data.csv :as csv]
[clojure.java.io :as io]))
我认为在您的情况下,您可以使用以下(未经测试)
(ns testprogram.core(:gen-class))
(require '(clojure.data [csv :as csv])
'(clojure.java [io :as io]))
参见以下desc
http://clojure.github.com/clojure/clojure.coreapi.html#clojure.core/require
答案 1 :(得分:1)
这个测试对我有用:
(ns test.csv-test
(:gen-class)
(:require [clojure.data.csv :as csv]
[clojure.java.io :as io]))
(defn main- [args]
(csv/read-csv "test"))
我在测试时遇到了“FileNotFound:找不到”问题。这是project.clj
文件中的一个简单错字。我建议仔细检查一下。
注意:这也有效:
(require '[clojure.data.csv :as csv]
'[clojure.java.io :as io])
(defn main- [args]
(csv/read-csv "test"))
虽然在:require
宏中使用ns
指令肯定是最佳做法,但这不是问题的根源。
在两个版本中,REPL输出:
user=> (in-ns 'test.csv-test)
#<Namespace test.csv-test>
test.csv-test=> (main- [])
(["test"])
还使用lein run
和java -cp <uberjar> test.csv_test