2010-07-24 12 views
7

Sto sperimentando con clojure e sto cercando di capire come utilizzare le librerie di terze parti. Sono stato in grado di scaricare qualche sorgente, metterla in un file jar con leiningen, inserirla nel mio classpath e (usare 'lib.etc) nel mio script. Ho anche giocato con gli oggetti in java.lang. *.Utilizzo di librerie java di terze parti, come com.jcraft.jsch, con clojure

Non ho avuto alcun successo con 3rd party java, però.

$ 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)" 
$ 

Sembra che debba essere creato un file __init.class o .clj. È vero o esiste un modo alternativo per caricare le classi java pure?

risposta

8

Per le classi Java utilizzano import: nomi

(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 

Nota Il pacchetto di classe e non hanno bisogno di essere citato in quanto import è una macro.

Inoltre non esiste alcun equivalente a import java.util.*; È necessario specificare quali classi si desidera importare.

1

Provare a utilizzare import per roba non clojure.

Problemi correlati