Использование сторонних java-библиотек, таких как com.jcraft.jsch, с clojure - PullRequest
7 голосов
/ 25 июля 2010

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

Ответы [ 2 ]

8 голосов
/ 25 июля 2010

Для классов 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 голос
/ 25 июля 2010

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

...