Я экспериментирую с 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, как предполагается, загружаются?
Для классов 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. *;
Вам необходимо указать, какие классы вы хотите импортировать.
Попробуйте использовать import
для вещей, не связанных с закрытием.