7

我正在尝试使用clojure,并试图体验使用 3rd 方库的感觉。我已经能够下载一些源代码,将其与 leiningen 捆绑到一个 jar 文件中,将它放在我的类路径中并(使用'lib.etc)在我的脚本中。我也玩过 java.lang.* 中的对象。

不过,我在 3rd 方 java 方面没有取得任何成功。

$ java -cp clojure.jar:clojure-contrib.jar:com.jcraft.jsch_0.1.31.jar clojure.main
Clojure 1.1.0
user=> (require 'com.jcraft.jsch)
java.io.FileNotFoundException: Could not locate com/jcraft/jsch__init.class or com/jcraft/jsch.clj on classpath:  (NO_SOURCE_FILE:0)

$ jar tf com.jcraft.jsch_0.1.31.jar | egrep "(init|clj)"
$

看起来必须创建一个 __init.class 或 .clj 文件。这是真的,还是有一些替代方法可以加载纯 Java 类?

4

2 回答 2

8

对于 java 类使用import

(import java.util.ArrayList)

;// or use a prefix for multiple classes:
(import [java.util ArrayList Collection])

;// or preferably in the ns declaration:
(ns my.lib
  [:import [java.util ArrayList Collection]])

user=> (def al (ArrayList.))
#'user/al
user=> (.add al "hi")
true
user=> (.size al)
1

import请注意,由于是宏,因此不需要引用包名和类名。

也没有等效于import java.util.*;您需要指定要导入的类。

于 2010-07-25T00:29:00.180 回答
1

尝试import用于非 Clojure 的东西。

于 2010-07-24T22:46:13.677 回答