2010-07-24 15 views
7

clojure ile deneme yapıyorum ve 3. taraf kitaplıklarını kullanmaya çalışıyorum. Bazı kaynakları indirebildim, leiningen ile bir jar dosyasına paketledim, sınıf yoluma koyup (lib.etc) betiğimde kullanıyorum. Java.lang'daki nesnelerle de oynadım.com.jcraft.jsch gibi 3. parti java kitaplıklarını kullanarak, clojure

Ancak, üçüncü parti java ile herhangi bir başarı elde edemedim.

$ 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 veya .clj dosyasının oluşturulması gerekiyor gibi görünüyor. Bu doğru mu, yoksa saf java sınıflarının yüklenmesi gereken başka bir alternatif var mı?

cevap

8

import kullanın:

(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 

Not paketi ve sınıf isimleri import bir makro olduğundan teklif edilecek gerekmez. Ayrıca, eşdeğeri yoktur. Almak istediğiniz sınıfları belirtmeniz gerekir.

1

Casus olmayan öğeler için import kullanmayı deneyin. java sınıfları için