2010-07-24 14 views
7

Eksperymentuję z clojure i próbuję uzyskać wyczucie korzystania z bibliotek innych firm. Byłem w stanie pobrać niektóre źródła, pakować je do pliku jar z leiningen, umieścić go w mojej ścieżce klas i (użyj "lib.etc" w moim skrypcie. Grałem także z obiektami w java.lang. *.Używanie bibliotek java innych firm, takich jak com.jcraft.jsch, z clojure

Nie odniosłem jednak żadnych sukcesów w java 3rd party.

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

Wygląda na to, że należy utworzyć plik __init.class lub .clj. Czy to prawda, czy jest jakiś alternatywny sposób ładowania klas czysto Java?

Odpowiedz

8

Dla klas java używać import: Nazwy

(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 

Uwaga opakowaniu i klasy nie muszą być notowane od import jest makro.

Brak również odpowiednika import java.util.*; Należy określić, które klasy mają zostać zaimportowane.

1

Spróbuj użyć import w przypadku przedmiotów niezwiązanych z kłamstwem.

Powiązane problemy