2010-07-24 1 views
7

Я экспериментирую с clojure и пытаюсь понять, как использовать сторонние библиотеки. Я смог загрузить некоторый источник, связать его с файлом jar с leiningen, поместить его в свой путь к классам и (использовать 'lib.etc) в моем скрипте. Я также играл с объектами в java.lang. *.Использование сторонних java-библиотек, таких как com.jcraft.jsch, с clojure

Я не имел никакого успеха с сторонней 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 были загружены?

ответ

8

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

Смежные вопросы