使用 Clojars 中的 Java 库的 "require" 语句
What "require" statement to use Java library from 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])
和许多变体,但 none 似乎有效。我查看了我知道如何要求的库的命名约定,以查看是否可以辨别模式,但我没有成功。
有没有一种直接的方法可以根据文件名、莱宁根坐标或其他信息告诉我们如何require
图书馆?
您刚刚发现了 Clojure 中的一个不一致之处。
简短的回答是您缺少一个冒号,这是源文件中使用的 (ns ...)
形式所必需的:
(ns example
(:require [clojure.data.json :as json]))
请注意,由于 ns
是一个宏,源文件版本不需要在左方括号前使用单引号。
另一种情况是在 REPL 中使用 (require ...)
函数 。在这种情况下,您需要语法:
> (require '[clojure.data.json :as json])
其中 >
是 REPL 提示符。在这种情况下,您正在调用 函数 ,因此 require
之前没有冒号。但是,由于 函数 不是 宏 ,您需要引用指定库名称及其别名的向量。
首先,您 require
不是 Clojure 的 Java 库,而是 import
一个或多个 Java 类。例如:
(:import [net.htmlparser.jericho Source TextExtractor])
然后通过 Java 互操作使用那些 类。例如
(Source. (java.net.URL. "https://yahoo.com"))
请注意,您不需要在类路径中导入 Java 类 即可使用它们。如果您打算使用它们一次或两次,则可以避免导入并仅通过它们的完全限定名称来引用它们:
(net.htmlparser.jericho.Source. (java.net.URL. "https://www.yahoo.com"))
显然您需要先查找 Java 库 API 并了解其工作原理。在这种特殊情况下,请参阅 here.
大多数 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])
和许多变体,但 none 似乎有效。我查看了我知道如何要求的库的命名约定,以查看是否可以辨别模式,但我没有成功。
有没有一种直接的方法可以根据文件名、莱宁根坐标或其他信息告诉我们如何require
图书馆?
您刚刚发现了 Clojure 中的一个不一致之处。
简短的回答是您缺少一个冒号,这是源文件中使用的 (ns ...)
形式所必需的:
(ns example
(:require [clojure.data.json :as json]))
请注意,由于 ns
是一个宏,源文件版本不需要在左方括号前使用单引号。
另一种情况是在 REPL 中使用 (require ...)
函数 。在这种情况下,您需要语法:
> (require '[clojure.data.json :as json])
其中 >
是 REPL 提示符。在这种情况下,您正在调用 函数 ,因此 require
之前没有冒号。但是,由于 函数 不是 宏 ,您需要引用指定库名称及其别名的向量。
首先,您 require
不是 Clojure 的 Java 库,而是 import
一个或多个 Java 类。例如:
(:import [net.htmlparser.jericho Source TextExtractor])
然后通过 Java 互操作使用那些 类。例如
(Source. (java.net.URL. "https://yahoo.com"))
请注意,您不需要在类路径中导入 Java 类 即可使用它们。如果您打算使用它们一次或两次,则可以避免导入并仅通过它们的完全限定名称来引用它们:
(net.htmlparser.jericho.Source. (java.net.URL. "https://www.yahoo.com"))
显然您需要先查找 Java 库 API 并了解其工作原理。在这种特殊情况下,请参阅 here.