什么"要求"声明使用Clojars的Java库

时间:2015-08-28 21:26:11

标签: java clojure clojars

大多数Clojure库不仅提供有关放入project.clj文件的内容的信息,还提供有关如何require源文件中的库的信息。例如,https://github.com/clojure/data.json提供 Usage 部分:

(ns example
  (:require [clojure.data.json :as json]))

我想使用Clojars库(它是一个Java库),它在Clojars上列出:https://clojars.org/zololabs/jericho-html-parser。我已成功将依赖项添加到project.clj文件中,但我不知道如何require它。

我尝试了(require '[zololabs.jericho-html-parser])和众多变体,但似乎都没有。我已经查看了库的命名约定,我知道如何查看是否可以识别模式,但是我还没有成功。

根据文件名,Leiningen坐标或其他信息,是否可以直接告诉您如何require图书馆?

2 个答案:

答案 0 :(得分:3)

首先,你不是require来自Clojure的Java库,你import一个或多个Java类。例如:

(:import [net.htmlparser.jericho Source TextExtractor])

然后通过Java interop使用这些类。 e.g。

(Source. (java.net.URL. "https://yahoo.com"))

请注意,您不需要导入类路径中已有的Java类以便使用它们。你可以避免导入,如果你要使用它们一次或两次,只需用他们的完全限定名称来引用它们:

(net.htmlparser.jericho.Source. (java.net.URL. "https://www.yahoo.com"))

显然,您需要首先查找Java库API并了解其工作原理。在这种特殊情况下,请参阅here

答案 1 :(得分:-3)

你刚刚发现了Clojure中的一个不一致之处。

简短的回答是您缺少冒号,这是源文件中使用的(ns ...)表单所必需的:

(ns example
  (:require [clojure.data.json :as json]))

请注意,由于ns是一个宏,因此源文件版本在左方括号之前不需要单引号。

另一种情况是在REPL使用(require ...) 功能。在这种情况下,您需要语法:

> (require '[clojure.data.json :as json])

其中>是REPL提示符。在这种情况下,您正在调用函数,因此require之前没有冒号。但是,由于函数不是,因此您需要引用指定库名称及其别名的向量。