使用第三方Java库(如com.jcraft.jsch)与Clojure配合使用

7
我正在尝试使用Clojure进行实验,并试图了解如何使用第三方库。我已经成功下载了一些源代码,使用Leiningen将其打包成一个JAR文件,并将其放入我的类路径中,在我的脚本中使用(use 'lib.etc)。我也尝试过java.lang.*中的对象。
然而,我在使用第三方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类应该加载的替代方法?

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.*;的等效写法。你需要指定你想要导入的类。

1

尝试使用import来处理非Clojure相关的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接