2010-07-24 17 views
7

Estoy experimentando con clojure y estoy tratando de familiarizarme con el uso de bibliotecas de terceros. Pude descargar alguna fuente, agruparla en un archivo jar con leiningen, ponerla en mi classpath y (usar 'lib.etc) en mi script. También jugué con los objetos en java.lang. *.Utilizando bibliotecas Java de terceros, como com.jcraft.jsch, con clojure

No he tenido ningún éxito con terceros java, sin embargo.

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

Parece que se debe crear un archivo __init.class o .clj. ¿Es esto cierto o hay alguna forma alternativa de cargar clases puras de Java?

Respuesta

8

Para las clases de Java utilizan 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 

Nota El paquete de clase y los nombres no tienen que ser citado ya import es una macro.

Además, no hay equivalente a import java.util.*; Debe especificar qué clases desea importar.

1

Pruebe usar import para cosas que no sean de clojure.

Cuestiones relacionadas