使用依赖项的正确方法是什么?

时间:2012-08-31 03:24:28

标签: clojure

也许我错过了一些东西或只是阅读过时的信息。基本上,我正在尝试使用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中尝试它会产生相同的结果。我很确定我试图“包括”他们错了。

2 个答案:

答案 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 runjava -cp <uberjar> test.csv_test

进行了测试