Пользование третьей стороной библиотеки Java, как com.jcraft.jsch, с clojure

Я экспериментирую с clojure и пытаюсь получить ощущение пользования сторонними библиотеками. Я смог загрузить некоторый источник, связать его в файл банки с leiningen, поместить его в мой путь к классу, и (используйте '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, как предполагается, загружаются?

7
задан Doug F 24 July 2010 в 22:33
поделиться

2 ответа

Для классов 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. *; Вам необходимо указать, какие классы вы хотите импортировать.

8
ответ дан 7 December 2019 в 03:09
поделиться

Попробуйте использовать import для вещей, не связанных с закрытием.

1
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: